【问题标题】:How to customize form validation messages如何自定义表单验证消息
【发布时间】:2011-12-28 21:43:39
【问题描述】:

我目前正在使用 django.contrib.auth 中的表单来更改用户密码,但我想在不编辑 django/contrib/auth/forms.py 文件的情况下自定义验证消息

有人指点吗?对我有很大帮助!

【问题讨论】:

  • 请不要以“Django:”开头你的标题我们知道你在问一个关于 Django 的问题。它是您问题的主要标签。正在观看 django 标签的人会看到您的问题在问题列表中突出显示。观看 django RSS 提要的人会在他们的阅读器中看到您的问题。在标题前加上标签没有任何作用。

标签: django forms validation messages


【解决方案1】:

(根据评论更新——同样的原则仍然适用:子类化表单并覆盖。)

子类化表单并覆盖特定字段的 clean 方法:

from django import forms
from django.contrib.auth.forms import PasswordChangeForm

class MyPasswordChangeForm(PasswordChangeForm):
    def clean_old_password(self):
        try:
            return super(MyPasswordChangeForm, self).clean_old_password():
        except forms.ValidationError:
            raise forms.ValidationError("Booh, the password was not correct!")

...然后在您的视图中使用MyPasswordChangeForm 而不是 PasswordChangeForm。

【讨论】:

  • 实际上我指的是这种消息(当验证失败时),例如:forms.py 中的第 197 行 from contrib auth: raise forms.ValidationError(_("Your old password was enter wrong.请重新输入。"))
  • 太棒了!这正是我所需要的。还有一件事,我想了解 super() 是做什么的?我读了一点,但我无法理解,在这个例子中它是做什么的?再次感谢!
  • 它调用了“super”/“parent”方法。 MyPasswordChangeForm 继承自 PasswordChangeForm。 super(MyPasswordChangeForm, self) 给出一个带有当前数据的 PasswordChangeForm 实例。发生的事情是 PasswordChangeForm.clean_old_password 被调用,如果抛出验证错误会被捕获,并且会引发自定义错误。
猜你喜欢
  • 2012-11-01
  • 1970-01-01
  • 2014-09-06
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
相关资源
最近更新 更多