django迁移 Cannot add or update a child row: a foreign key constraint fails

文章描述了在执行Django迁移时遇到的外键约束错误,原因是迁移文件中的模型定义与配置文件中的字段类型不一致。解决方案包括:同步迁移文件和配置文件的字段类型,删除问题迁移文件及数据库记录,然后重新执行迁移。建议在迁移时指定应用名称,以避免影响其他项目,并提供了回滚和初始化迁移的备用方案。
摘要由CSDN通过智能技术生成

背景

djang manage.py migrate报错:

Cannot add or update a child row: a foreign key constraint fails

涉及数据库操作,一定要先备份!!!

解决

经对迁移文件分析,发现migrations中的迁移文件0008_auto_20230207_1052.py中的class Migration(migrations.Migration)里面,多产生了几个models类的id更新,对比前几个迁移文件models的id字段类型:
1、发现跟配置文件里面的文件不一致(2个配置文件,上次到云端的为settings_base.py,生产自行添加的为settings.py);
迁移文件中的id字段类型为AutoField,而配置文件为BigAutoField

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

将配置文件中跟迁移修改对齐即可
2、先删除0008_auto_20230207_1052.py迁移文件,然后去django_migrations表,删除最近一次迁移失败的迁移记录,再执行以下命令去更新数据库即可
在这里插入图片描述

python manage.py makemigrations 应用名称
python manage.py migrate 应用名称

这里建议:
2.1、迁移时一定要加上自己的应用名称,因为多项目联动时,如果有引用的应用,如core等,会产生其他的迁移影响其他应用;
2.2、如果只是针对某一个迁移文件,可以参考

python manage.py makemigrations 应用名称 0008
python manage.py migrate 应用名称 0008

2.3、【备用】如果以上无法解决,可以回滚到前一个迁移文件

python manage.py migrate 应用名称 0007

再去执行2.2
2.4、【备用】如果是新项目,且以上均无法解决,则直接铲掉所有的迁移文件,再执行2.2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值