無論如何根據是否填寫了同一表單中的另一個字段來有條件地要求字段?有條件地只需要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