无论如何根据是否填写了同一表单中的另一个字段来有条件地要求字段?有条件地只需要Django模型表单中的一个字段
If field1 has no data, but field2 does
form is valid.
If field1 has no data and field2 has no data
form is invalid
不找任何JavaScript的解决方案。我觉得应该用django的形式解决,但不太清楚如何去做。
无论如何根据是否填写了同一表单中的另一个字段来有条件地要求字段?有条件地只需要Django模型表单中的一个字段
If field1 has no data, but field2 does
form is valid.
If field1 has no data and field2 has no data
form is invalid
不找任何JavaScript的解决方案。我觉得应该用django的形式解决,但不太清楚如何去做。
覆盖清洁机壳(个体经营)方法,检查self.cleaned_data,提高ValidationError
您还可以,如果你知道验证将适用于此类的所有对象做到这一点使用模型。要在表单级别使用下面的内容,请使用cleared_data。下面是从Django文档使用ValidationError
样品右:
class Article(models.Model):
status = models.CharField(max_length=75, blank=False, null=False)
pub_date = models.CharField(max_length=75, blank=False, null=False)
def clean(self):
# Don't allow draft entries to have a pub_date.
if self.status == 'draft' and self.pub_date is not None:
raise ValidationError('Draft entries may not have a publication date.')
# Set the pub_date for published items if it hasn't been set already.
if self.status == 'published' and self.pub_date is None:
self.pub_date = datetime.date.today()
参考:Model Instance Clean,Django Validators
这里是一个表格的例子:
class SimpleForm(forms.ModelForm):
def clean(self):
cleaned_data = super(SimpleForm, self).clean() # Get the cleaned data from default clean, returns cleaned_data
field1 = cleaned_data.get("field1")
field2 = cleaned_data.get("field2"),
if not field1 and not field2:
raise forms.ValidationError('Please fill in both fields.')
return cleaned_data
的最佳解决方案对于有条件的必填字段是重写表单的干净方法并弹出错误条件。例如:
clean(self):
if self.cleaned_data.get(some_field) == 1:
self.errors.pop(other_field, None)
注意:如果这样做了Django的CMS插件,确保覆盖在models.py定义清洁(个体经营)方法的插件,而不是在forms.py。 – 2014-04-09 22:49:57