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.

Вернуться на верх