Проблема здесь в том, что Представление входа в Django не передает 'request' в 'authentication_form' , когда 'request.method' равен 'POST', а 'AuthenticationForm' ожидает аргумент ключевого слова 'request'.
Я решил проблему следующим образом:
Поместите мой код в оболочку вида "django.contrib.auth.login".
Вы все еще можете использовать свой "MyAuthenticationForm ', устанавливающий ваш urls.py следующим образом
url(r'^accounts/login/$',
'myapp.views.custom_login',
{'template_name': 'registration/login.html',
'authentication_form': MyAuthenticationForm
},
name='auth_login'),
и помещающий это в ваши views.py
def custom_login(request, *args, **kwargs):
if request.method == 'POST':
form = MyAuthenticationForm(data=request.POST, request=request)
# Here you take care of your form validation and interaction with request
return login(request, *args, **kwargs)
Обратите внимание, что аргументы' data 'и' request 'должны быть аргументами ключевого слова.