我有一个包含多个字段的表单。我通过表单验证对每个字段进行单独的验证检查。但是,在将用户重定向到不同视图之前,我还需要检查是否填写了少量字段。我希望我能以某种方式将错误附加到forms.non_field_errors,因为它不适用于特定字段,但我不确定这是什么正确的语法。我在网上查了一下,发现..
form.errors['__all__'] = form.error_class(["error msg"])
这会显示错误消息,但它似乎也会弄乱其他页面,如果我点击其他任何内容,则会显示错误消息。
我试过
form._errors[NON_FIELD_ERRORS] = form.error_class()
这导致'NoneType'对象没有属性'setdefault'错误。
我试过了
form.non_field_errors().append("Please complete your profile in order to access the content.")
这似乎没有做任何事情,我无法在视图上看到错误消息。
最好的方法是什么?理想情况下,我不想在表单的干净方法中这样做。我觉得我应该能够在视图中向表单添加错误。
答案 0 :(得分:17)
调用full_clean(),这应该初始化form._errors
。这一步至关重要,如果你不这样做,它就行不通了。
制作错误列表,它会显示一条消息列表,并将其设置为:error_list = form.error_class(['your error messages'])
将错误列表分配给NON_FIELD_ERRORS ,您必须从NON_FIELD_ERRORS
导入django.forms.forms
,然后分配:form._errors[NON_FIELD_ERRORS] = error_list
以下是来自shell的演示:
In [1]: from bet.forms import BetForm
In [2]: from django.forms.forms import NON_FIELD_ERRORS
In [3]: form = BetForm()
In [4]: form.full_clean()
In [5]: form._errors[NON_FIELD_ERRORS] = form.error_class(['your error messages'])
In [6]: form.non_field_errors()
Out[6]: [u'your error messages']
答案 1 :(得分:4)
这有点过时,但我最近遇到了同样的问题,并希望为未来的读者提供更多的信息。
__all__
的默认字典键示例:
if form.is_valid():
form.errors['__all__'] = form.error_class(['Your Error Here!'])
答案 2 :(得分:0)
self._errors.setdefault('__all__', ErrorList()).extend([""])