Django执行makemigrations时报KeyError: 'content_type'问题咨询
错误含义解析
你遇到的KeyError: 'content_type'错误核心原因是迁移链不同步:Django执行迁移时需要按照迁移文件的顺序逐步修改项目状态,当前有一个迁移操作要删除content_type字段,但Django在当前维护的模型状态中找不到这个字段的记录,通常是本地和生产的迁移文件不一致、或者你之前删除过部分迁移文件导致链条断裂。
可以删除旧迁移文件重建流程吗?
可以,这是解决迁移链断裂的常用方案,但必须严格按步骤操作,操作前必须先完整备份生产数据库,避免数据丢失。
具体操作步骤(保留现有生产数据)
- 第一步:完整备份生产环境的所有数据库数据,确认备份可用后再执行后续操作
- 第二步:删除所有App下的历史迁移文件,保留各迁移目录下的
__init__.py文件,可执行以下命令快速清理:
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete find . -path "*/migrations/*.pyc" -delete
- 第三步:基于当前最新的数据模型生成新的初始迁移文件:
python manage.py makemigrations - 第四步:执行伪迁移,让Django标记新生成的初始迁移已经全部执行,避免重复修改现有表结构:
python manage.py migrate --fake - 第五步:验证迁移状态,执行
python manage.py showmigrations确认所有迁移都已标记为已应用,后续修改模型即可正常执行makemigrations和migrate流程。
其他可选排查方案(无需全量重置迁移)
如果不想清空所有迁移记录,可以尝试以下操作定位问题:
- 对比本地和生产环境的所有迁移文件,确认是否有遗漏上传的涉及
content_type字段增删的迁移文件 - 查看生产库的
django_migrations表,找到最近一次执行成功的迁移记录,删除该记录之后所有未执行的迁移文件,同时删除django_migrations表中对应的未执行记录,之后重新生成迁移即可。
内容的提问来源于stack exchange,提问作者josh schmidt
相关产品推荐
相关产品推荐

