Django如何覆盖默认表单错误消息

Posted

技术标签:

【中文标题】Django如何覆盖默认表单错误消息【英文标题】:Django How to override default form error messages 【发布时间】:2013-05-11 16:23:57 【问题描述】:

forms.py

class PhoneForm(forms.ModelForm):
    emergency_number = forms.IntegerField(required=False,error_messages='required': 'Enter a valid phone number')

在验证输入的数据是数字时,我收到默认的 django 错误消息 "Enter a whole number"。而不是我希望它是 "Enter a valid phone number"

从 Doc 我使用上述方法,但出现相同的消息。如何解决。

谢谢

【问题讨论】:

【参考方案1】:

这样定义你的字段:

emergency_number= forms.IntegerField(
                      required=False, 
                      error_messages='invalid':'Enter a valid phone number'
                  )

在文档中查看 IntegerField 的错误键是 4:

required, invalid, max_value, min_value

因此,您必须在要覆盖的 error_messages dict 中包含键。

顺便说一句,required 永远不会被抛出,因为您指定的是 required=False

希望这会有所帮助!

【讨论】:

我发现这是覆盖error_messages的最简单方法。我也没有意识到每个表单字段都有默认的错误键,这让事情变得更容易理解。谢谢!【参考方案2】:

您还需要为invalid 值指定消息,如

class PhoneForm(forms.ModelForm):
    emergency_number = forms.IntegerField(required=False,
         error_messages='required': 'Enter a valid phone number',
                         'invalid': 'Enter a valid phone number'
                        )

【讨论】:

以上是关于Django如何覆盖默认表单错误消息的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖 Grails 中的默认错误消息?

如何覆盖 django-redux 默认用户注册表单

Typo3:如何通过属性验证覆盖默认错误消息?

覆盖 django-allauth 的默认模板

Django - 覆盖管理站点的登录表单

如何删除所需属性的 HTML5 表单验证默认错误消息 [重复]