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)
....
# 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."),
}
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",
)
....
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
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).'),
}
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.')
9条答案
按热度按时间xoshrz7s1#
最简单的方法是将默认错误集提供给表单域定义。表单域可以使用命名参数。例如:
stszievb2#
要全局覆盖“必需的”错误消息,请在字段上设置default_error_messages类属性:
这需要在示例化任何字段之前发生,例如通过将其包含在settings.py中。
dddzy1tm3#
我也是从google来的,我需要的是覆盖表单中所有字段的默认必填信息,而不是每次定义新的表单字段时都传递error_messages参数。另外,我还没有准备好深入研究i18 n,这个应用程序不需要多语言。这篇博客文章中的评论最接近我想要的:
http://davedash.com/2008/11/28/custom-error-messages-for-django-forms/
对于所有需要消息的表单字段,我是这样做的:-
csbfibhn4#
你可能想看看Django出色的i18n support。
uyhoqukh5#
假设我有一个
BaseForm
,其中包含一些error_messages
字典,如下所示:我想覆盖其中一个错误消息:
基本上,只需要覆盖字典中的一个值,但我不确定它在国际化中会如何工作。
sg24os4d6#
来自ProDjango的书:
r7s23pms7#
嗯,看来这个问题没有简单的解决办法。
浏览Django代码时,我发现默认的错误信息被硬编码到每个表单字段类中,例如:
最简单的方法是使用
error_messages
参数,所以我必须编写 Package 器函数:如果有人知道一种更优雅的方法来做这件事,将非常感谢看到它:)
谢谢!
lztngnrs8#
k10s72fa9#
既然这个页面出现在搜索中,也许它值得添加我的0.02美元,即使这个问题是旧的。(我仍然习惯于堆栈溢出的特殊礼仪。)
下划线(“_”)是ugettext_lazy的别名(如果这是正确的术语);只要看看文件顶部的import语句和“硬编码”的消息,Django的国际化文档应该会有所帮助,例如http://www.djangobook.com/en/2.0/chapter19/