我使用django的form.add_error选项将自定义错误添加到
表格检查。
当我在ModelForm中使用add_error时,错误显示在
中模板,但是当我在视图中使用它时,它不会......
可能是什么问题?
modelform add_error(在clean方法中):
self.add_error('field', "fdgdsfgfds.")
视图add_error:
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 }}
答案 0 :(得分:2)
Django模型表单有一定的工作方式,这本质上是一件好事,因为它可以确保您的代码保持干净,并且每个方法都有一个标准化的流控制。
表单clean
和clean_fieldname
方法应该是您完成所有验证的地方,这些方法是从表单is_valid
方法中调用的,所有这些方法都会因为错误而导致声明表格是否有效。有关is_valid
如何实际调用干净方法
form_valid
和form_invalid
供您在视图中处理,以处理应显示的响应。如果表单有效,默认情况下django通用视图将呈现success_url
,尽管您可能会发现要覆盖这些方法以返回JsonResponse
或类似方法以使表单更具ajaxxy。
因此,只要您想报告错误,就需要使用干净的方法。您可能会在将来发现要重复使用表单,并且您不希望通过再次进行验证而在视图中重复自己,因此保留表单中包含的所有验证可以实现这一点。视图作业是处理您希望显示表单的位置以及它需要的其他上下文。