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