【问题标题】:Django: Add non_field_error from view?Django:从视图中添加 non_field_error?
【发布时间】:2011-05-12 20:33:50
【问题描述】:

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

【问题讨论】:

    标签: django django-forms


    【解决方案1】:

    你也可以使用相当优雅的add_error() 方法。适用于 Django >= 1.7。

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

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

    像魅力一样工作。

    【讨论】:

      【解决方案2】:

      补充丹尼尔的回答,具体语法是:

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

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

      from django.forms.forms import NON_FIELD_ERRORS
      

      【讨论】:

        【解决方案3】:

        好吧,您可以在表单的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...
        

        【讨论】:

        • 查看我的其他问题以了解推理:stackoverflow.com/questions/4228722/… 该字段需要大量自定义,这在表单中很难做到。
        • @Mark 只是因为你想自定义显示,并不意味着你不能在表单中包含该字段用于验证和错误显示。
        • 对..如果我正确地命名它,Django 不会知道区别是吗?
        猜你喜欢
        • 2013-11-02
        • 1970-01-01
        • 2012-09-04
        • 2013-03-21
        • 1970-01-01
        • 2018-03-05
        • 1970-01-01
        • 2011-10-09
        • 2014-07-29
        相关资源
        最近更新 更多