2010-01-28 61 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) 
相关问题