2010-07-31 45 views
4

我有一种情况,用户可以在html表单上点击一个复选框字段“field_enable”,一个好的jQuery操作将显示另一个字段“fielda”,供用户输入更多的数据英寸当“field_enable”被选中时,我想要求用户也填写“fielda”。当“field_enable”未选中时,应允许用户提交表单而不出错。django clean_field引用其他字段

我希望所有的错误出现在字段上方的错误列表中,而不是整个表单的form.errors列表(这就是为什么我没有使用表单的clean()方法)。因此,我在下面提出了这个代码。

启用/禁用逻辑工作得很好。当选中“field_enable”时,用户必须填写“fielda”,如果未选中,则用户通过。但是,当检查框时,要求用户填写更多信息,即使他们填写了“fielda”的值,他们也会得到验证错误“需要Fielda”。这违背了期望。

没有人有任何建议,为什么“FIELDA”总是验证失败时“field_enable”被选中

class MyForm(forms.ModelForm): 

    def clean_fielda(self): 
     cleaned_data = self.cleaned_data 
     if cleaned_data.get("field_enable"): 
      raise forms.ValidationError("Fielda is required") 
     return cleaned_data['fielda'] 

class MyModel(models.Model): 
    field_enable = models.BooleanField(default=False) 
    fielda = models.CharField(max_length=128, blank=True, null=True) 

任何帮助是非常赞赏的模型的例子!

回答

5

你想,如果“field_enable”被检查,你不必为“field_a”的值,以提高验证错误。像这样(你错过了“field_a”存在检查):

class MyForm(forms.ModelForm): 

    def clean_fielda(self): 
     cleaned_data = self.cleaned_data 
     if cleaned_data.get("field_enable") and not cleaned_data.get('field_a'): 
      raise forms.ValidationError("Fielda is required") 
     return cleaned_data['fielda'] 
+0

哇,我简直不敢相信它。我一定盯着它太久了:)我会试试看;谢谢你的帮助! – 2010-07-31 18:23:38