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

Django创建超级用户报CustomUser matching query does not exist如何解决?

故障原因与解决方案

直接报错原因

你的post_save信号逻辑存在错误:触发信号时传入的instance本身就是刚刚完成保存的CustomUser实例,你却用实例对象去匹配username字符串字段,永远不可能查询到对应数据,直接抛出DoesNotExist错误。

其他隐含问题

  • 你在CustomUser类中重复定义了password字段,且仅设置了15位长度。Django默认会将密码哈希后存储,哈希后的字符串长度远大于15位,会被直接截断,后续即便创建用户成功也无法通过密码校验登录。
  • 信号逻辑没有判断是否为新建用户操作,后续更新CustomUser信息时会重复触发创建UserProfile的逻辑,抛出一对一关联重复的报错。
  • 额外冗余查询:完全不需要在信号中再次查询CustomUser,直接使用传入的instance即可。

修复步骤

  1. 修正信号函数代码:
def CreateProfile(sender, instance, created, **kwargs):
    # 仅在新建用户时创建关联Profile
    if created:
        print("profile create too..")
        # 直接使用已保存的CustomUser实例,无需额外查询
        UserProfile.objects.create(user=instance)
  1. 删除CustomUser类中冗余的password字段定义,AbstractUser原生已包含符合要求的密码字段,无需重写。修正后的CustomUser代码如下:
class CustomUser(AbstractUser):
    email = models.EmailField(max_length=250, null=False, unique=True)
    name = models.CharField(max_length=50, null=False)
    username = models.CharField(max_length=50, null=False)
                                          
    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name', 'username']
  1. 确认项目settings.py中已配置自定义用户模型:
# 替换为你的用户应用名称
AUTH_USER_MODEL = 'user.CustomUser'
  1. 重置迁移文件解决历史遗留的字段错误:
    • 删除用户应用下migrations目录中除__init__.py外的所有文件
    • 删除当前使用的数据库文件
    • 重新执行迁移命令:
    python manage.py makemigrations
    python manage.py migrate
    
  2. 重新执行python manage.py createsuperuser即可正常创建超级用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 09:39:05