Django:从视图中添加non_field_error?

时间:2010-11-19 20:17:37

标签: django django-forms

我有一个Django表单,其中包含一些我在模板中渲染的字段。我还有一些直接的HTML输入元素,我想通过访问request.POST变量来在视图中验证。如果那些没有验证,我想在Django表单中注入一个错误,以便我可以在页面上显示它。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:40)

您还可以使用非常优雅的add_error()方法。适用于Django> = 1.7。

如果您将field设置为None表单,则会将错误视为" non_field"一。 所以:

form.add_error(None, "I'm non-field error")

就像一个魅力。

答案 1 :(得分:22)

添加到Daniel的答案中,具体语法是:

form.errors['__all__'] = form.error_class(["error msg"])

请注意,您可以将'__all__'替换为常量NON_FIELD_ERRORS,以获得更好的兼容性(信用grafa)。

from django.forms.forms import NON_FIELD_ERRORS

答案 2 :(得分:6)

好吧,您可以在表单的errors字典中插入任何内容,而非字段错误会在errors['__all__']中。

但是为什么你要把一些字段保留在Django表单之外,只是为了把它们的错误放回去?为什么不把表格中的所有字段放在首位呢?如果只是你正在使用一个模型并且想要为它添加字段,你可以在Django中通过简单地声明表单级别的字段来实现这一点 - 然后你可以在表单中为它们定义干净的方法。

class ExtendedModelForm(forms.ModelForm):
    extra_field_1 = forms.CharField()
    extra_field_2 = forms.CharField()

    def clean_extra_field_1(self):
        ...etc...