我有一种情况,用户可以在html表单上单击复选框字段“field_enable”,并且不错的jQuery操作将显示另一个字段“fielda”,供用户输入更多数据。当“field_enable”为选中,我想要求用户也填写“fielda”。如果未选中“field_enable”,则应允许用户提交表单而不会出现错误。
我希望所有错误都显示在字段上方的错误列表中,而不是整个表单的form.errors列表中(这就是为什么我不使用表单的clean()方法的原因)。因此,我想出了以下代码。
启用/禁用逻辑效果很好。选中“field_enable”时,用户必须填写“fielda”,而未选中时,用户会通过。然而,当检查框,要求用户填写详细信息,即使他们在值填写“FIELDA”他们窗台得到验证错误“需要FIELDA”。这违背了期望。
有谁对为什么每次检查“field_enable”时“fielda”总是无法通过验证提出任何建议?
class MyForm(forms.ModelForm):
def clean_fielda(self):
cleaned_data = self.cleaned_data
if cleaned_data.get("field_enable"):
raise forms.ValidationError("Fielda is required")
return cleaned_data['fielda']
模型的一个例子
class MyModel(models.Model):
field_enable = models.BooleanField(default=False)
fielda = models.CharField(max_length=128, blank=True, null=True)
任何帮助深表感谢!
乔
最佳答案
如果您在和中选中“field_enable”,并且没有“field_a”的值,那么您想提出一个验证错误。像这样(您缺少“field_a”存在检查):
class MyForm(forms.ModelForm):
def clean_fielda(self):
cleaned_data = self.cleaned_data
if cleaned_data.get("field_enable") and not cleaned_data.get('field_a'):
raise forms.ValidationError("Fielda is required")
return cleaned_data['fielda']