Django迁移已应用但缺失迁移文件,新增模型时makemigrations报错如何解决
Django生成新模型迁移时重复识别已有数据表的解决方案
临时规避方案(仅本次生成新迁移使用)
适用于后续无需通过Django ORM操作blacklist_id表的场景:
- 临时注释models.py中
blacklist_id对应的Model定义 - 执行迁移生成命令,仅生成新增模型对应的迁移文件:
python manage.py makemigrations <你的APP名称> - 确认生成的迁移文件无
blacklist_id相关操作后,执行迁移生效:python manage.py migrate - 取消注释之前的
blacklist_id对应的Model代码即可
永久修复方案(保留ORM操作能力)
适用于后续需要通过Django ORM操作blacklist_id表的场景:
- 先调整
blacklist_id对应的Model定义,保证字段名、字段类型、索引约束等和数据库中现有表结构完全一致 - 临时注释掉本次要新增的其他Model代码,避免和补录迁移的逻辑混淆
- 执行命令生成
blacklist_id对应的初始迁移:python manage.py makemigrations <你的APP名称> - 执行假迁移命令,告知Django该表的迁移已经在数据库完成,不需要实际执行建表操作:
python manage.py migrate --fake <你的APP名称> - 取消注释之前新增的Model代码,正常执行
makemigrations和migrate操作即可,后续不会再重复识别blacklist_id为新增模型
注意:执行
--fake操作前务必核对迁移文件中blacklist_id的建表逻辑和数据库现有表结构完全匹配,否则后续会出现迁移冲突问题。
内容的提问来源于stack exchange,提问作者Omroth
相关产品推荐
相关产品推荐

