Я бы хотел, чтобы мои пользователи могли войти в систему по электронной почте.Я видел примеры выполнения этого путем написания пользовательского интерфейса аутентификации.Однако я хотел бы сделать это, унаследовав django.contrib.auth.forms.AuthenticationForm
и добавив новое поле с именем email
, которое в методе clean_email
извлекает имя пользователя из модели User
и затем передает его в родительскую форму.
Я пытался сделать это, но я потерпел неудачу, так как не могу изменить запрос или заполнить значение поля.Это то, что я получил до сих пор.
class LoginForm(AuthenticationForm):
email = forms.EmailField(
required=True, label=_("Email")
)
def __init__(self, request=None, *args, **kwargs):
super(LoginForm, self).__init__(
request, *args, **kwargs
)
self.fields['username'].widget = forms.widgets.HiddenInput()
def clean_email(self):
user = User.objects.filter(email=self.cleaned_data['email'])
if user:
#self.fields['username'].value = user.username
#return user.email
else:
raise forms.ValidationError(_("Incorrect email or password."))
Спасибо.