【发布时间】:2020-02-19 11:03:53
【问题描述】:
您可以通过 2 种方式引发验证错误。第一个是self.add_error(),第二个是raise ValidationError()。
我读到当您使用self.add_error('field1','description here') 时,field1 也会自动从cleaned_data 列表中删除,我假设 ValidationError 对象也添加到self.errors 列表中,这是正确的吗?
但是当您不选择使用self.add_error 而选择使用raise ValidationError 时会发生什么?这个对象是否也在幕后自动添加到errors 列表中?以及如何在正确的无效字段下将此错误消息显示为标题?
谢谢
【问题讨论】:
-
可能有多个错误。如果您引发验证错误,则该方法的控制流将停止。
-
你这是什么意思?用户被重定向到错误页面?因为我不希望这种情况发生。我希望返回包含任何值的表单,以及相关字段下的一些错误消息。这只能通过
the add_error()方法完成吗?如果是这样,那么在什么情况下您希望在errors列表上使用 ValidationError? -
不,引发 ValidationError 会停止该特定方法的流程。因此,如果您在
clean()中引发 ValidationError,那么您在该方法中编写的任何代码在此之后都不会运行。在这种情况下,您可以考虑add_error()。如果您在clean_<some_field>()中引发 ValidationError,那么引发 ValidationError 可能是有意义的,因为如果第一次检查已经失败,您可能不想进行其他检查。引发的 ValidationErrors 一起显示在form.errors中。
标签: django django-errors