Django内置User模型修改密码功能无效问题求助
问题原因及解决办法
核心问题
你重写了PasswordChangeView的form_valid方法,但没有调用父类的form_valid逻辑,导致表单验证通过后没有执行密码更新的操作,直接跳转了成功页面。
Django自带的PasswordChangeView的form_valid方法内部会调用form.save()来完成用户密码的更新,你的重写覆盖了这个关键步骤。
修复代码
修改视图中的form_valid方法,先调用父类方法完成密码更新,再执行自定义逻辑:
class ChangePasswordView(PasswordChangeView): form_class = ChangePasswordForm success_url = reverse_lazy('password_success') def form_valid(self, form): # 先调用父类方法,完成密码更新核心操作 response = super().form_valid(form) # 再执行你的自定义通知逻辑 account = self.request.user.account email = account.user.email update_password_notification_task.delay(email) return response
排查思路
- 检查重写的类视图方法:Django内置类视图的核心方法(如
form_valid)包含关键业务逻辑,重写时必须确保调用父类对应方法,除非你明确要替换全部逻辑。 - 调试表单
save方法:可以在ChangePasswordForm中临时重写save方法并打印日志,确认该方法是否被调用,以此定位问题出在视图还是表单层面。 - 直接验证数据库状态:修改密码后,查看
auth_user表的password字段是否发生变化,确认是代码逻辑问题还是其他配置问题。
内容的提问来源于stack exchange,提问作者Yehuda
相关产品推荐
相关产品推荐

