【发布时间】:2011-05-12 20:33:50
【问题描述】:
我有一个 Django 表单,其中包含我在模板中呈现的一堆字段。我还有一些直接的 HTML 输入元素,我想通过访问 request.POST 变量在视图中进行验证。如果这些不验证,我想在 Django 表单中注入一个错误,以便我可以在页面上显示它。有没有办法做到这一点?
【问题讨论】:
标签: django django-forms
我有一个 Django 表单,其中包含我在模板中呈现的一堆字段。我还有一些直接的 HTML 输入元素,我想通过访问 request.POST 变量在视图中进行验证。如果这些不验证,我想在 Django 表单中注入一个错误,以便我可以在页面上显示它。有没有办法做到这一点?
【问题讨论】:
标签: django django-forms
你也可以使用相当优雅的add_error() 方法。适用于 Django >= 1.7。
如果您将field 设置为None,表单会将错误视为“non_field”之一。
所以:
form.add_error(None, "I'm non-field error")
像魅力一样工作。
【讨论】:
补充丹尼尔的回答,具体语法是:
form.errors['__all__'] = form.error_class(["error msg"])
请注意,您可以将'__all__' 替换为常量NON_FIELD_ERRORS 以获得更好的兼容性(信用grafa)。
from django.forms.forms import NON_FIELD_ERRORS
【讨论】:
好吧,您可以在表单的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...
【讨论】: