【问题标题】:Django - form Clean() and field errorsDjango - 表单 Clean() 和字段错误
【发布时间】: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 并且不是私有的

标签: django validation django-forms django-validation


【解决方案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】:
      1. 标准方式是raise ValidationError(message)
      2. 将特定于字段的验证移至clean_<fieldname>() 方法,在您的情况下为clean_address。在这种方法中引发的ValidationError 会将错误消息附加到特定字段。从clean() 筹集的一个将归于一般模型。

      【讨论】:

      • 我目前正在使用clean() 来验证与多个字段相关的某些内容——我对 Django 和 Python 很陌生,我想知道是否有更好/更短的检查方法/创建/附加字段特定错误。
      • 添加了第 3 项,也许它描述了您的需求。取自 django 的内部实现 clean_fields
      • 你能扩展你的建议#3吗?它对我不起作用。我可以看到 ValidationError class 接受这样的错误字典,但 Forms._clean_form 实际上并没有使用它。
      • @AlexLebedev - 我还没有测试你的第三个建议,但根据文档是不正确的,不是吗?设置字段特定错误时,应将消息分配给self._errors
      • 你说得对,我混淆了表单和模型验证。 #3 仅适用于模型。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2013-06-19
      相关资源
      最近更新 更多