在django RegistrationForm中编辑用户名字段的错误消息

时间:2012-02-19 18:14:27

标签: django django-forms django-registration

我正在尝试更改django默认注册表单中的一些错误消息:

class RegistrationForm(forms.Form):
    username = forms.RegexField(regex=r'^\w+$',max_length=30,widget=forms.TextInput(attrs=attrs_dict),label=_("Username"),error_messages={'invalid': _("This value must contain only letters,numbers and underscores.")})
    email=forms.EmailField(widget=forms.TextInput(attrs=dict(attrs_dict,maxlength=75)),label=_("Email address"))
    password1 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict,render_value=False),label=_("Password"))
    password2 = forms.CharField(widget=forms.PasswordInput(attrs=attrs_dict,render_value=False),label=_("Password (again)"))

例如我想要更改

'invalid':用户名字段的_(“此值必须只包含字母,数字和下划线。”) 每当我编辑默认表格时,它都显示我没有变化......即使我尝试使用chmod ......

还建议我是否有办法限制用户只输入用户名字段中的数字...

1 个答案:

答案 0 :(得分:0)

查看django.forms.field中的代码(第423至439行)(在django 1.3.1上)。

您注意到对于RegexField,django使用关键字参数error_message覆盖error_messages ['invalid'],默认为none。

因此,如果您想保留RegexField,请执行以下操作:

username = forms.RegexField(regex=r'^\w+$',max_length=30,widget=forms.TextInput(attrs=attrs_dict),label=_("Username"),error_message = _("This value must contain only letters,numbers and underscores."))

要仅接受数字作为用户名,我建议使用forms.IntegerField,它会提供以下内容:

username = forms.IntegerField(min_value = 0, error_messages={'invalid': _("This value must contain only letters,numbers and underscores.")})

在我看来,使用IntegerField是最干净,最好的方法。它可以满足您的需求:将用户名限制为仅数字。