django表单 - 从clean()中提出特定的字段验证错误

时间:2017-11-30 13:20:00

标签: django django-forms

我对表单进行了验证检查,该表单依赖于多个字段,但最好让验证错误向用户明确显示哪些字段导致问题,而不仅仅是顶部的错误消息表格。 (表单有很多字段,因此更清楚地显示错误的位置)。

作为一种解决方法,我尝试在每个相关字段clean_field()方法中创建相同的验证,以便用户在这些字段旁边看到错误。但是,我似乎只能从self.cleaned_data访问该特定字段而不能访问任何其他字段?

或者可以从表单clean()方法中引发字段错误吗?

尝试1:

   def clean_supply_months(self):
        if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_months'):
            raise forms.ValidationError('Please specify time at address if less than 3 years.')

    def clean_supply_years(self):
        if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_years'):
            raise forms.ValidationError('Please specify time at address if less than 3 years.')

    def clean_same_address(self):
          .....

1 个答案:

答案 0 :(得分:7)

如果要访问多个字段的已清理数据,则应使用clean方法而不是clean_<field>方法。 add_error()方法允许您将错误分配给特定字段。

例如,要将{em>请指定地址时间错误消息添加到same_address字段,您可以执行以下操作:

def clean(self):
    cleaned_data = super(ContactForm, self).clean()
    if not self.cleaned_data.get('same_address') and not self.cleaned_data.get('supply_months'):
        self.add_error('same_address', "Please specify time at address if less than 3 years.")
    return cleaned_data

有关详细信息,请参阅validating fields that rely on each other上的文档。