Django 2.2中makemigrations重复生成相同迁移脚本求助
解决Django makemigrations重复生成相同AlterField迁移的问题
我之前也碰到过一模一样的情况,这种无意义的重复迁移问题,核心原因大多是Django的迁移检测逻辑没能识别出模型字段定义和已有迁移记录中的定义是等价的,针对你的场景,我可以给出几个落地的解决步骤:
1. 统一外键的引用格式
对比你的模型代码和生成的迁移文件就能发现问题:
- 模型里
lesson字段直接引用了Lesson类:lesson = models.ForeignKey(Lesson, related_name='lesson_batchtemp', on_delete=models.SET_NULL, null=True) - 但迁移文件里自动生成的是字符串格式的引用
to='courses.Lesson'
Django在对比字段定义哈希值时,会把直接类引用和字符串引用判定为不同配置,导致每次执行makemigrations都认为字段被修改了。你需要把模型里的外键改成和迁移一致的字符串引用格式:
# 修改models.py中的lesson字段 lesson = models.ForeignKey('courses.Lesson', related_name='lesson_batchtemp', on_delete=models.SET_NULL, null=True) # 如果Lesson和BatchUploadRecord在同一个app下,也可以简化为 'Lesson'
2. 清理重复的无效迁移
把之前重复生成的迁移文件(比如0027_auto_20190409_1658.py、0028_...、0029_...)全部删除,这些文件都是重复的AlterField操作,没有实际业务意义,只会增加迁移流程的混乱。
3. 重新生成迁移并验证
执行以下命令:
./manage.py makemigrations
这时候应该不会再生成重复的Alter field lesson on batchuploadrecord迁移了。如果问题仍然存在,可以尝试:
- 检查是否有自定义模型元类或者第三方库干扰了字段检测逻辑
- 删除项目中
__pycache__目录下的迁移缓存文件,重新触发检测
内容的提问来源于stack exchange,提问作者Wantchalk
相关产品推荐
相关产品推荐

