2010-01-28 67 views
8

無論如何根據是否填寫了同一表單中的另一個字段來有條件地要求字段?有條件地只需要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的形式解決,但不太清楚如何去做。

回答

5

您還可以,如果你知道驗證將適用於此類的所有對象做到這一點使用模型。要在表單級別使用下面的內容,請使用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 CleanDjango 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 

參考:Form & Field Validation

0

的最佳解決方案對於有條件的必填字段是重寫表單的乾淨方法並彈出錯誤條件。例如:

clean(self): 
    if self.cleaned_data.get(some_field) == 1: 
     self.errors.pop(other_field, None) 
相關問題