Django - Проблема с аутентификацией при использовании 2 форм (одна из них - экран входа в систему)
Я пытаюсь создать экран входа в систему, который имеет строку поиска в верхней части.
При попытке войти в систему я получаю эту ошибку: "'CustomAuthenticationForm' object has no attribute 'login'".
Я последовал совету в этом посте здесь.
Вот мой html:
<form class="text-2xl" method="POST">
{% csrf_token %}
{{ forms.login|crispy }}
<button value="login" name="action" class="text-white flex text-xl mx-auto mt-4 max-h-10 stone-bg stone-bevel px-2 pt-1 drop-shadow-md hover:text-amber-200" type="submit">
Login
</button>
</form>
Вот ссылка на gist для моего класса MultiFormsView здесь.
Вот мои взгляды:
class CustomLoginView(MultiFormsView):
form_classes = {
'login': CustomAuthenticationForm,
'search': SearchForm,
}
success_url = reverse_lazy('home')
template_name = 'login.html'
def get_context_data(self, **kwargs):
context = super(CustomLoginView, self).get_context_data(**kwargs)
context['search'] = SearchForm
context['login'] = CustomAuthenticationForm
return context
def login_form_valid(self, form):
return form.login(self.request, redirect_url=self.get_success_url())
Вот мои формы:
class CustomAuthenticationForm(AuthenticationForm):
username = forms.CharField(
label = "",
widget = forms.TextInput(attrs={
'class': "form-control text-lg h-8 rounded-full px-2 pt-1 border-2 border-black my-1",
'placeholder': "Username *",
'size': "35",
})
)
password = forms.CharField(
label = "",
widget = forms.PasswordInput(attrs={
'class': "form-control text-lg h-8 rounded-full px-2 pt-1 border-2 border-black my-1",
'placeholder': "Password *",
'size': "35",
})
)
class Meta(AuthenticationForm):
model = CustomUser
fields = ('username', 'password',)
После изучения унаследованных классов AuthenticationForm я не нашел метода ".login()". Я также попытался просто аутентифицироваться на месте с помощью документации Django здесь, но тогда я не возвращал объект. Я запутался в том, что происходит с этим новым MultiFormsView.