You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 22:57:21