Django обновление пароля для пользователя не работает
Используя встроенную в django модель User, у меня есть базовое представление обновления пароля:
class ChangePasswordView(PasswordChangeView):
form_class = ChangePasswordForm
success_url = reverse_lazy('password_success')
def form_valid(self, form):
account = self.request.user.account
email = account.user.email
update_password_notification_task.delay(email)
return redirect(self.success_url)
def password_success(request):
return render(request, 'accounts/password_success.html')
его форма:
class ChangePasswordForm(PasswordChangeForm):
class Meta:
model = User
и его url:
path('password/',ChangePasswordView.as_view(template_name='accounts/change_password.html')),
И, наконец, шаблон:
<h1>Change Password...</h1>
<form method="POST">
{% csrf_token %}
{{form.as_p}}
<button>Change Password</button>
</form>
Ошибок нет, и все вроде бы работает, но пароль не обновляется. Не знаю почему, вроде все сделал, но почему-то после обновления пароля и перенаправления на reverse_url
если я пытаюсь выйти и войти, новый пароль не срабатывает.
Я не знаю, что вызывает эту проблему и в каком файле, поэтому трудно устранить неполадки.
Как ни странно, все, что мне нужно было сделать, это добавить form.save()
:
class ChangePasswordView(PasswordChangeView):
form_class = ChangePasswordForm
success_url = reverse_lazy('password_success')
def form_valid(self, form):
form.save()
account = self.request.user.account
email = account.user.email
update_password_notification_task.delay(email)
return redirect(self.success_url)