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

创建Django超级用户触发IntegrityError,可空字段仍报非空约束错误

解决Django创建超级用户时的NOT NULL约束错误

问题分析

你自定义的InvestorUser模型里,watchlist字段明明设置了null=True和blank=True,但创建超级用户时仍报约束错误,核心原因大概率是数据库表结构没跟上模型定义的更新——也就是数据库中的b3ack_investoruser表,watchlist字段实际还是被标记为NOT NULL,和模型配置不一致。

解决方案

1. 先确认数据库表结构

直接查询数据库里的字段属性,验证问题:

  • 用PostgreSQL的话,执行SQL命令:
    SELECT column_name, is_nullable FROM information_schema.columns WHERE table_name = 'b3ack_investoruser' AND column_name = 'watchlist';
    
  • 用MySQL的话,执行:
    DESCRIBE b3ack_investoruser;
    

如果结果里is_nullable显示NO,说明表结构确实没同步,继续下面的步骤。

2. 重置迁移并同步表结构

先备份数据库(避免数据丢失),再按以下步骤操作:

  • 删除b3ack应用下migrations目录中,除了__init__.py以外的所有迁移文件
  • 进入数据库,删除django_migrations表中所有app='b3ack'的记录
  • 重新生成迁移文件:
    python3 manage.py makemigrations b3ack
    
  • 应用迁移,同步表结构:
    python3 manage.py migrate b3ack
    

3. 手动修改数据库表结构(若上述步骤无效)

如果重置迁移还是没解决问题,直接手动修改表字段的约束:

  • PostgreSQL:
    ALTER TABLE b3ack_investoruser ALTER COLUMN watchlist DROP NOT NULL;
    
  • MySQL:
    ALTER TABLE b3ack_investoruser MODIFY COLUMN watchlist JSON NULL;
    

完成以上操作后,再尝试创建超级用户即可解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:35:26