TypeError: BaseForm.__init__() получил неожиданный аргумент в виде ключевого слова 'request'

Я использую Django для создания страницы аутентификации (вход, регистрация...) Во время написания программы логина я столкнулся с этой ошибкой, и я не могу понять, откуда она взялась

users/urls.py

path('login/', CustomLoginView.as_view(), name='login'),

users/views.py

class CustomLoginView(LoginView):
    form_class = AuthenticationForm
    template_name = 'users/login.html'

    # shitty patch to bypass the error
    def get_form_kwargs(self):
        """Return the keyword arguments for instantiating the form."""
        kwargs = super().get_form_kwargs()
        # Remove 'request' from kwargs if it exists
        kwargs.pop('request', None)
        return kwargs

users/form.py

User = get_user_model()    
class AuthenticationForm(forms.Form):
    identifier = forms.CharField(max_length=100,
                               required=True,
                               widget=forms.TextInput(attrs={'placeholder': 'Username, Email, or Phone',
                                                             'class': 'form-control',
                                                             }))
    password = forms.CharField(max_length=50,
                               required=True,
                               widget=forms.PasswordInput(attrs={'placeholder': 'Password',
                                                                 'class': 'form-control',
                                                                 'data-toggle': 'password',
                                                                 'id': 'password',
                                                                 'name': 'password',
                                                                 }))
    remember_me = forms.BooleanField(required=False)

# this is from ChatGPT that suggested it to me to debug the problem... but it didn't clarify my ideas much
    def __init__(self, *args, **kwargs):
        print("Initialization arguments:", args, kwargs)  # Debugging line
        super().__init__(*args, **kwargs)

    def clean(self):
        identifier = self.cleaned_data.get('identifier')
        password = self.cleaned_data.get('password')

        if identifier and password:
            user = authenticate(username=identifier, password=password)
            if not user:
                try:
                    user = User.objects.get(email=identifier)
                    if not user.check_password(password):
                        raise forms.ValidationError("Invalid login credentials")
                except User.DoesNotExist:
                    # Try to authenticate with phone number
                    try:
                        user = User.objects.get(phone=identifier)
                        if not user.check_password(password):
                            raise forms.ValidationError("Invalid login credentials")
                    except User.DoesNotExist:
                        raise forms.ValidationError("Invalid login credentials")

            if user and not user.is_active:
                raise forms.ValidationError("This account is inactive.")

            self.cleaned_data['user'] = user
        return self.cleaned_data

    def get_user(self):
        return self.cleaned_data.get('user')

результатом работы фрагмента кода ChatGPT является Initialization arguments: () {'initial': {}, 'prefix': None, 'request': <WSGIRequest: GET '/users/login/'>} и решается предложенным патчем.

Где/что я делаю неправильно? В чем проблема, которая привела к ошибке?

...последнее, но не менее важное...плохо ли сделать такую страницу входа, имея в одном поле ник, email или телефон, и передать результат в представление и манипулировать так?

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