Django的覆盖默认形式的错误信息(Django override default form er

2019-07-19 18:09发布

我怎么能覆盖默认的格式错误信息(例如:需要他们在其他语言)为所有的应用程序在我的项目(或至少是1个应用)

谢谢!

Answer 1:

最简单的方法是提供默认的错误设置为窗体字段定义。 表单域可以采取命名的参数吧。 例如:

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)
    ....

希望这可以帮助。



Answer 2:

要全局覆盖“需要”的错误消息,设置技术领域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."),
}

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



Answer 3:

也来到这里,从谷歌和我需要的是覆盖默认所需的消息在我的表格所有领域,而不是通过我定义了新的表单字段error_messages参数每次。 另外,我还没有准备好钻研国际化,这个应用程序不需要使用多种语言。 在这篇博客的评论是最接近我想要的东西: -

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",
    )
    ....


Answer 4:

你可能想看看Django的优秀的国际化支持 。



Answer 5:

嗯,似乎没有简单的解决方法的问题。

威乐通过Django的代码飞掠,我发现默认的错误消息是硬编码到每个窗体域类,为前:

class CharField(Field):
    default_error_messages = {
        'max_length': _(u'Ensure this value has at most %(max)d characters (it has %(length)d).'),
        'min_length': _(u'Ensure this value has at least %(min)d characters (it has %(length)d).'),
    }

而最简单的方法是使用error_messages说法,所以我不得不写包装函数:

def DZForm(name, args = {}):
    error_messages = {
        'required': u'required',
        'invalid': u'invalid',
    }
    if 'error_messages' in args.keys():
        args['error_messages'] = error_messages.update(args['error_messages'])
    else:
        args['error_messages'] = error_messages
    return getattr(forms, name)(**args)

如果smdb知道这样做的更高贵的方式真的appreaciate看看吧:)

谢谢!



Answer 6:

从ProDjango书:

from django.forms import fields, util


class LatitudeField(fields.DecimalField):  
    default_error_messages = {
        'out_of_range': u'Value must be within -90 and 90.',
    }


    def clean(self, value):  
        value = super(LatitudeField, self).clean(value)  
        if not -90 <= value <= 90:  
            raise util.ValidationError(self.error_messages['out_of_range'])
        return value


Answer 7:

说我有一个BaseForm与一些error_messages字典,如:

error_messages = {
    'required': 'This field is required',
    'caps': 'This field if case sensitive' 
}

我想重写错误消息之一:

class MySpecialForm(BaseForm):
    def __init__(self, *args, **kwargs):
        super(MySpecialForm, self).__init__(*args, **kwargs)
        self.error_messages['caps'] = 'Hey, that CAPSLOCK is on!!!'

基本上,只要覆盖字典值之一。 我不知道它将如何与国际化的工作,虽然。



Answer 8:

from django import forms
from django.utils.translation import gettext as _


class MyForm(forms.Form):
     # create form field
     subject = forms.CharField(required=True)

     # override one specific error message and leave the others unchanged
     # use gettext for translation
     subject.error_messages['required'] = _('Please enter a subject below.')


Answer 9:

由于该页面在搜索中出现,也许这是值得加入我的$ 0.02,即使问题是旧的。 (我还是习惯堆栈溢出的特殊礼仪。)

下划线(“_”)是一个别名(如果这是正确的术语)的ugettext_lazy; 只看import语句在文件的顶部,“硬编码”的消息。 然后,Django的国际化文档应该帮助,如http://www.djangobook.com/en/2.0/chapter19/



文章来源: Django override default form error messages