Django覆盖默认表单错误消息

Bro*_*ock 50 forms django message

如何为项目中的所有应用程序(或至少1个应用程序)覆盖默认表单错误消息(例如:需要使用其他语言)

谢谢!

小智 71

最简单的方法是将一组默认错误提供给表单字段定义.表单字段可以为其指定一个命名参数.例如:

my_default_errors = {
    'required': 'This field is required',
    'invalid': 'Enter a valid value'
}

class MyForm(forms.Form):
    some_field = forms.CharField(error_messages=my_default_errors)
    ....
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.


小智 8

要全局覆盖"required"错误消息,请在Field上设置default_error_messages类属性:

# form error message override
from django.forms import Field
from django.utils.translation import ugettext_lazy
Field.default_error_messages = {
    'required': ugettext_lazy("This field is mandatory."),
}
Run Code Online (Sandbox Code Playgroud)

这需要在实例化任何字段之前发生,例如通过将其包含在settings.py中.


k4m*_*4ml 6

也来自google,我需要的是覆盖表单中所有字段的默认必需消息,而不是每次定义新表单字段时都传递error_messages参数.此外,我还没有准备好深入研究i18n,这些应用程序不需要多语言.这篇博客文章中的评论最接近我想要的内容: -

http://davedash.com/2008/11/28/custom-error-messages-for-django-forms/

对于所有需要消息的表单字段,这就是我所做的: -

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        for k, field in self.fields.items():
            if 'required' in field.error_messages:
                field.error_messages['required'] = 'You have to field this.'

class MUserForm(MyForm):
    user = forms.CharField(
        label="Username",
    )
    ....
Run Code Online (Sandbox Code Playgroud)