Вы действительно должны просто переопределить форму аутентификации. Представление принимает аргумент, который позволяет вам легко переопределять форму.
Я думаю, что-то вроде этого должно работать:
Все, что вам нужно сделать, это переопределить метод clean_username следующим образом:
Редактирование:
переопределение метода clean_username не может изменить сообщение об ошибке проверки из-за следующего из form and field validation docs
:
Метод clean () для поля
подкласс. Это ответственно за
запустить to_python, проверить и
run_validators в правильном порядке
и распространять свои ошибки. Я толстый
в любое время, любой из методов поднять
ValidationError, проверка прекращается
и эта ошибка возникает. Этот метод
возвращает чистые данные, которые затем
вставлен в cleaned_data
словарь вида.
Метод clean_<fieldname>()
в
подкласс формы - где находится
заменено на название формы
атрибут поля. Этот метод делает любой
уборка, которая является специфической для этого
конкретный атрибут, не связанный с
тип поля это. Этот метод
не передано никаких параметров. Ты сможешь
нужно посмотреть значение поля
в self.cleaned_data и помните, что
это будет объект Python в этом
точка, а не оригинальная строка
представлены в форме (это будет в
cleaned_data потому что общее поле
Метод clean (), выше, уже
очистил данные один раз).
Подкласс Field проверяется первым и возвращает очищенные данные, которые используются для метода clean_<field_name>()
. Если возникает ошибка, проверка этого поля прекращается.
Это означает, что для переопределения сообщения вам необходимо либо переопределить проверку поля, либо сделать так, чтобы поле не требовало значения, чтобы на этом шаге не возникала ошибка проверки и вызывать необходимый метод в clean_<fieldname>()
методе
>>> from django.contrib.auth.forms import AuthenticationForm
>>> class MyAuthForm(AuthenticationForm):
... def __init__(self, *args, **kwargs):
... super(MyAuthForm, self).__init__(*args,**kwargs)
... self.fields['username'].error_messages['required']='Custom Required Msg'
...
>>> form = MyAuthForm(data={'password':'asdf'})
>>> form.is_valid()
False
>>> form.errors
{'username': [u'Custom Required Msg']}
>>>
urls.py
from someapp.forms import MyAuthForm
urlpatterns = patterns('',
...
(r'^accounts/login/$', 'django.contrib.auth.views.login', {'template_name': 'someapp/login.html', 'authentication_form':MyAuthForm, }),
...