Python 有条件地只需要Django模型表单中的一个字段
是否根据是否填写了同一表单中的其他字段,有条件地要求填写一个字段Python 有条件地只需要Django模型表单中的一个字段,python,django,forms,validation,model,Python,Django,Forms,Validation,Model,是否根据是否填写了同一表单中的其他字段,有条件地要求填写一个字段 If field1 has no data, but field2 does form is valid. 不寻找任何javascript解决方案。我觉得应该用django表单来解决这个问题,但不太确定如何最好地解决它。重写.clean(self)方法,检查self.cleaned_数据并引发ValidationError 如果知道验证将应用于此类的所有对象,也可以使用模型执行此操作。要在表单级别使用下面的数据,请使用
If field1 has no data, but field2 does
form is valid.
不寻找任何javascript解决方案。我觉得应该用django表单来解决这个问题,但不太确定如何最好地解决它。重写.clean(self)方法,检查self.cleaned_数据并引发ValidationError
如果知道验证将应用于此类的所有对象,也可以使用模型执行此操作。要在表单级别使用下面的数据,请使用已清理的\u数据。下面是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()
参考文献:
以下是一个表单示例:
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方法,并根据条件弹出错误。例如:
clean(self):
if self.cleaned_data.get(some_field) == 1:
self.errors.pop(other_field, None)
注意:如果对Django CMS插件执行此操作,请确保覆盖插件的models.py定义中的clean(self)方法,而不是forms.py中的方法。
clean(self):
if self.cleaned_data.get(some_field) == 1:
self.errors.pop(other_field, None)