Редактирование сообщений об ошибках поля имени пользователя в django RegistrationForm - PullRequest
0 голосов
/ 19 февраля 2012

Я пытаюсь изменить некоторые сообщения об ошибках в стандартной форме регистрации 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 голосов
/ 19 февраля 2012

Рассматривая код в django.forms.field (строки с 423 по 439) (в django 1.3.1).

Вы заметили, что для RegexField django переопределяет error_messages ['invalid'] с помощьюаргумент ключевого слова error_message, который по умолчанию равен 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."))

Чтобы принимать только цифры в качестве имени пользователя, я бы рекомендовал использовать формы.IntegerField, который дал бы что-то вроде:

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

Использование IntegerField - это, на мой взгляд, самый чистый и хороший способ сделать это.И он делает то, что вы хотите: ограничение имени пользователя только цифрами.

...