【问题标题】:Show error in templates django在模板 django 中显示错误
【发布时间】:2016-04-01 10:10:26
【问题描述】:

我使用 django 的 form.add_error 选项将自定义错误添加到

表格检查。

当我在 ModelForm 中使用 add_error 时,错误显示在

模板,但是当我在视图中使用它时它不会..

可能是什么问题?

modelform add_error(在 clean 方法中):

self.add_error('field', "fdgdsfgfds.")

视图添加错误:

def form_valid(self, form):
    form.add_error('field', "sfsfdsfsd.")
    return self.form_invalid(form)    

在模板中:

{{ form.errors }}
{{ field.errors }}
{{ form.non_field_errors }}
{{ form.as_table }}

【问题讨论】:

  • 不能在form有效的方法中使用
  • 你知道我可以在 form_valid 中使用什么来自定义检查吗?
  • 在文档中说:“此方法允许从 Form.clean() 方法内或完全从表单外部向特定字段添加错误;例如从视图中。” - 所以我可以在视图中使用它.. 但如果不是在 form_valid 中,比在哪里?
  • 表单有效方法在完成所有验证步骤后被调用,因此添加错误没有意义在干净的方法中这样做有什么问题? (我会写一个答案,但我在手机上)
  • 实际上不知道为什么我没有从干净的方法中做到这一点。但如果你有时间写一个答案,我将不胜感激

标签: django django-templates


【解决方案1】:

Django 模型表单有一定的工作方式,这本质上是一件好事,因为它可以确保您的代码保持干净,并且您的每个方法都具有标准化的流程控制。

表单cleanclean_fieldname 方法应该是完成所有验证的地方,这些方法是从表单is_valid 方法调用的,并且它们都有助于说明表单是否有效。有关 is_valid 实际如何调用 clean 方法的更详细说明,请参阅 my other answer

form_validform_invalid 供您在视图中处理以处理应显示的响应。默认情况下,如果表单有效,django 通用视图将呈现 success_url,尽管您可能会发现您想覆盖这些方法以返回 JsonResponse 或类似的方法以使您的表单更加 ajaxxy。

因此,任何时候您想要报告错误,都需要使用您的干净方法。将来您可能会发现您想重用一个表单,并且您不想在视图中重复自己,因为必须再次进行验证,因此保留表单中包含的所有验证使这成为可能。视图的工作是处理你想在哪里显示你的表单以及它需要什么其他上下文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-20
    • 2021-08-26
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2020-08-16
    相关资源
    最近更新 更多