以下是在Django中定义MinLengthValidator的方法:
class MinLengthValidator(BaseValidator):
compare = lambda self, a, b: a < b
clean = lambda self, x: len(x)
message = ungettext_lazy(
'Ensure this value has at least %(limit_value)d character (it has %(show_value)d).',
'Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).',
'limit_value')
code = 'min_length'
我尝试在我的代码中更改错误消息,如下所示:
password_min_length_validator = MinLengthValidator(8)
password_min_length_validator.message = ungettext_lazy(
'Ensure password has at least %(limit_value)d character (it has %(show_value)d).',
'Ensure password has at least %(limit_value)d characters (it has %(show_value)d).',
'limit_value')
但是我收到了这个错误:
ugettext() takes exactly 1 argument (3 given)
我这样做就像django.core.validators一样。
答案 0 :(得分:0)
看起来您正在使用早期版本的Django,因此您应该将代码基于Django版本的MinLengthValidator
,而不是当前的实现。您收到错误是因为Django 1.6中更改了ungettext_lazy
方法(请参阅ticket #19160)。
例如,在Django 1.5.X中,您可以这样做:
from django.utils.translation import ugettext_lazy as _
class MinLengthValidator(BaseValidator):
compare = lambda self, a, b: a < b
clean = lambda self, x: len(x)
message = _('Ensure this value has at least %(limit_value)d characters (it has %(show_value)d).')
code = 'min_length'
password_min_length_validator = MinLengthValidator(8)
password_min_length_validator.message = _(
'Ensure password has at least %(limit_value)d characters (it has %(show_value)d).',
)
在实例化验证器后,您可以将其子类化为
,而不是设置messages属性class MyMinLengthValidator(MinLengthValidator):
message = _('Ensure my_field has at least %(limit_value)d characters (it has %(show_value)d).')
my_min_length_validator = MyMinLengthValidator(8)
或者,您可以在表单字段中使用error_messages
选项:
class MyForm(forms.Form):
my_field = forms.CharField(validators=[MinLengthValidator(8)],
error_messages={'min_length': _('Ensure my_field has at least %(limit_value)d characters (it has %(show_value)d).')
})