Django数据迁移报错:已删除Character模型无法查找的问题咨询
Django模型迁移时LookupError的解决方法
问题核心
你遇到的问题是Django迁移执行顺序逻辑冲突:虽然Content的数据迁移依赖了Character的最后一个迁移,但删除Character模型的迁移没有依赖这个数据迁移,导致Django可能优先执行删除操作,等数据迁移运行时,Character模型已经被移除,因此抛出LookupError: App 'characters' doesn't have a 'Character' model。
解决步骤
要确保数据迁移在删除模型的迁移之前执行,只需给删除Character模型的迁移文件添加依赖,强制它等待Content的数据迁移完成后再执行:
- 找到characters应用中删除Character模型的迁移文件(比如你最后生成的
0010_delete_character.py这类命名的文件)。 - 修改该文件的
dependencies列表,把Content应用的数据迁移(即你的0002_auto_20230630_1434)添加进去:
# characters/migrations/0010_delete_character.py from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("characters", "0009_alter_character_avatar_alter_character_avatar_crop"), # 新增这一行,让删除迁移依赖Content的数据迁移 ("content", "0002_auto_20230630_1434"), ] operations = [ migrations.DeleteModel(name="Character"), ]
原理说明
Django的迁移系统完全依赖依赖关系链确定执行顺序:
- 你的Content数据迁移已经依赖了Character的最后一个迁移,确保数据迁移执行时Character模型处于可用状态。
- 给删除迁移添加对Content数据迁移的依赖后,就强制Django先完成数据迁移,再执行删除模型的操作,从根源上避免了模型找不到的问题。
修改完成后,你可以直接在staging环境执行./manage.py migrate,所有迁移会按正确顺序自动执行,无需分步操作。
内容的提问来源于stack exchange,提问作者Kevin Renskers
相关产品推荐
相关产品推荐

