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

Django修改number字段设为主键执行迁移时出现唯一性索引创建错误

问题根因
  1. 主键唯一性冲突:你的004迁移中将number字段设置为了主键,主键天然要求非空且唯一,但你数据库中该表的现有数据里存在多条number值为空字符串''的记录,创建主键唯一索引时触发重复值报错。
  2. 迁移逻辑缺陷:你在003迁移中先删除了原有的number字段,004迁移重新新增number作为主键时,Django会给表中已有的所有历史数据行的新number字段填充空值,直接违反主键约束。
  3. 字段配置错误:004迁移中link_number为正整数字段,你设置的默认值是空字符串'',字段类型和默认值不匹配,后续执行也会触发类型错误。
  4. 迁移依赖错误:004迁移的依赖配置写的是efish应用的迁移记录,但你的业务表属于book应用,依赖配置错误可能导致迁移执行顺序异常。
修复方案
  • 先回滚未执行完成的迁移:如果003、004迁移尚未成功执行,直接删除两个迁移文件重新生成;如果已经执行了部分步骤,执行python manage.py migrate book 0002(将版本号替换为003之前的正常迁移版本)回滚到迁移前的状态。
  • 调整字段属性:如果要将number设为主键,必须去掉blank=True配置,且提前补全所有历史数据的number值,保证所有值唯一非空;如果不需要number作为主键,删除004迁移中删除原id字段、将number设为primary_key=True的逻辑,保留默认自增id作为主键即可。
  • 修正link_number配置:将默认值改为合法的正整数值(例如default=1),如果允许该字段为空,补充null=True配置。
  • 校验迁移文件:重新生成迁移后检查依赖配置是否为book应用的上一版本迁移,确认字段配置和业务逻辑一致后再执行迁移操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:45:04