Django - 表单 Clean() 和字段错误
Posted
技术标签:
【中文标题】Django - 表单 Clean() 和字段错误【英文标题】:Django - form Clean() and field errors 【发布时间】:2012-04-15 15:31:36 【问题描述】:我正在尝试在 clean() 表单中设置字段错误,我目前正在这样做:
self._errors['address'] = self._errors.get('address', ErrorList())
self._errors['address'].append(_(u'Please specify an address.'))
有没有更好的,如果可能的话更短的方法来做到这一点?
【问题讨论】:
使用 self.errors 代替,它返回 _errors 并且不是私有的 【参考方案1】:Django 1.7 中的新功能是Form.add_error( field, message )
。
https://docs.djangoproject.com/en/dev/ref/forms/api/#django.forms.Form.add_error
【讨论】:
【参考方案2】:也许这会对你有所帮助。它通常首选您覆盖 clean 并且在函数内部您可以执行以下操作
如果你想提出表单特定的错误,你可以这样做。
self._errors["field"] = ErrorList([u"Error"])
这是确保你得到错误类
如果你有一个非字段错误,你可以像这样简单地引发一个验证错误
raise forms.ValidationError(_("Error"))
希望这会有所帮助。
【讨论】:
【参考方案3】:-
标准方式是
raise ValidationError(message)
。
将特定于字段的验证移至clean_<fieldname>()
方法,在您的情况下为clean_address
。在这种方法中引发的ValidationError
会将错误消息附加到特定字段。从clean()
筹集的一个将归于一般模型。
【讨论】:
我目前正在使用clean()
来验证与多个字段相关的某些内容——我对 Django 和 Python 很陌生,我想知道是否有更好/更短的检查方法/创建/附加字段特定错误。
添加了第 3 项,也许它描述了您的需求。取自 django 的内部实现 clean_fields
你能扩展你的建议#3吗?它对我不起作用。我可以看到 ValidationError
class 接受这样的错误字典,但 Forms._clean_form
实际上并没有使用它。
@AlexLebedev - 我还没有测试你的第三个建议,但根据文档是不正确的,不是吗?设置字段特定错误时,应将消息分配给self._errors
。
你说得对,我混淆了表单和模型验证。 #3 仅适用于模型。以上是关于Django - 表单 Clean() 和字段错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 clean 更改 Django formset 中的字段
Django:覆盖表单中的 clean() 方法 - 关于引发错误的问题
[oldboy-django][2深入django]form表单clean_xx, clean完成数据验证+ form错误信息