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

Django创建超级用户触发IntegrityError:id字段非空约束违规

问题原因与解决方案

核心问题

你遇到的IntegrityError是因为手动覆盖了AbstractUser的主键字段,但未配置自增逻辑,导致创建超级用户时id字段为null,违反非空约束。此外你的模型还存在两处冗余/冲突定义:

  1. AbstractUser默认自带自增AutoField类型的主键id,你手动定义为普通IntegerField(primary_key=True)后,Django不会自动生成自增值,插入数据时就会出现null。
  2. AbstractUser已内置password字段,Django会自动处理密码哈希存储,你定义的hashed_password完全多余,还可能与内置逻辑冲突。

修复步骤

  • 移除冗余字段:删掉模型中的id和hashed_password字段,保留AbstractUser默认的主键与密码处理逻辑:
    class JobseekerRegisterInfo(AbstractUser):
        phone_number = PhoneNumberField()
        email = models.EmailField(unique=True)
        full_name = models.CharField(max_length=120)
    
        def __str__(self):
            return self.full_name
    
  • 若需自定义主键:如果确实要指定主键类型,使用AutoField或BigAutoField确保自增特性:
    class JobseekerRegisterInfo(AbstractUser):
        id = models.BigAutoField(primary_key=True)  # BigAutoField适配更大数值范围
        phone_number = PhoneNumberField()
        email = models.EmailField(unique=True)
        full_name = models.CharField(max_length=120)
    
        def __str__(self):
            return self.full_name
    
  • 确认全局配置:在settings.py中必须指定自定义用户模型:
    AUTH_USER_MODEL = '你的应用名.JobseekerRegisterInfo'
    
  • 重置数据库迁移:如果之前生成过迁移文件,删除应用下migrations目录中除__init__.py外的所有文件,清空数据库后重新执行:
    python manage.py makemigrations
    python manage.py migrate
    
  • 重新创建超级用户:完成上述步骤后,执行python manage.py createsuperuser即可正常创建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:55:45