Django Customize PasswordResetView: В __init__() отсутствует 1 обязательный позиционный аргумент: 'user'
Я пытаюсь настроить Django PasswordResetView для проверки длины пароля, но получаю такую ошибку:
TypeError at /accounts/password_reset/
__init__() missing 1 required positional argument: 'user'
views.py
from django.contrib.auth import views as auth_views
class PasswordResetView(auth_views.PasswordResetView):
form_class = PasswordResetForm
template_name = "accounts/users/password_reset.html"
email_template_name = "accounts/users/password_reset_email.html"
subject_template_name = "accounts/users/password_reset_subject.txt"
from_email = settings.EMAIL_HOST_USER
success_url = reverse_lazy("accounts_password_reset_done")
forms.py
class PasswordResetForm(SetPasswordForm):
def clean_new_password1(self):
password = self.cleaned_data.get("new_password1")
if len(password) < 12:
raise forms.ValidationError("Password must be at least 12 characters.")
return password
Очевидно, что класс SetPasswordForm должен быть взят пользователем при инициализации:
class SetPasswordForm(forms.Form):
. . .
def __init__(self, user, *args, **kwargs):
self.user = user
super().__init__(*args, **kwargs)
Я не нахожу четкого решения, как передать user
данные в PasswordResetView
и PasswordResetForm
, поскольку пользовательские данные используются при PasswordResetForm
создании экземпляра.
Метод SetPasswordForm
используется в представлении , а не PasswordResetConfirmView
PasswordResetView
. В PasswordResetConfirmView
метод get_form_kwargs()
[Django-doc] перекрывается методом [GitHub]:
def get_form_kwargs(self): kwargs = super().get_form_kwargs() kwargs['user'] = self.user return kwargs
Вы, таким образом, скорее всего, должны подклассифицировать представление PasswordResetConfirm
и работать с формой PasswordResetForm
для PasswordResetView
.