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

Django CreateView用户注册提交后success_url触发NoneType无__dict__属性错误

问题原因与修复方案

错误根源

你重写的UserCreateForm的save方法没有返回创建的用户实例,这是触发报错的核心原因:

  • Django的ModelForm约定save方法需要返回操作完成后的模型实例,CreateView在表单校验通过后会调用form.save(),将返回值赋值给视图的self.object属性
  • 你重写的save方法没有显式设置返回值,默认返回None,导致self.object = None
  • 从报错栈可以看到,部署环境的Django版本执行get_success_url逻辑时,会尝试读取self.object.__dict__对success_url做格式化插值,访问None的属性自然触发了AttributeError。

开发环境正常的原因

是开发环境和部署环境的Django版本不一致导致的表现差异:低版本Django的get_success_url逻辑仅在success_url包含{}格式化占位符时才会读取self.object的属性,你当前配置的success_url是固定路径,所以低版本下不会触发报错;而你部署环境的Django版本调整了这部分逻辑,无论是否有占位符都会执行格式化操作,因此触发了错误。

修复方案

在forms.py的save方法末尾加上返回user实例的语句即可,修改后的代码如下:

def save(self, commit = True):
    user = super().save(commit = False)

    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.email = self.cleaned_data['email']

    if commit:
        user.save()
    # 新增返回实例的语句
    return user

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:36:04