背景
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
文章评论