<分区>
我正在努力将我的遗留应用程序从 Django 1.11.13 升级到 2.2.8。我尽职尽责地解决了每一个兼容性问题,但我遇到了一个我不知道如何解决的问题。当我尝试在我的本地环境中启动网络服务器时,出现此错误(仅显示出现的完整错误跟踪的结尾):
File "/Users/me/my_app/my_model/migrations/0001_initial.py", line 37, in Migration
('entry', models.ForeignKey(to='my_model.Entry')),
TypeError: __init__() missing 1 required positional argument: 'on_delete'
我理解为什么现在需要 on_delete
——我只是花了一段时间在各处更新我的模型以适应这种变化——但我不知道如何在不经历几十次的情况下解决这个特定问题旧的迁移文件以使它们符合?!
我尝试了
squashmigrations
至少减少了我必须清理的地方的数量,但我得到了完全相同的TypeError
。我尝试使用旧版本的 Django 进行
squashmigrations
。我成功地避免了TypeError
,但最终却遇到了一大堆循环导入错误。因为我实际上不需要回滚迁移历史记录,所以我尝试按照 these instructions (scenario 2) to clear the migration history while keeping the existing database 进行操作,但我无法运行
makemigrations
来了解我为使我的模型符合 Django 2.2 所做的更改,当我决定跳过并稍后处理时,showmigrations
因相同的TypeError
而失败。 (有没有其他方法可以根据当前数据库获得一组新的初始迁移?它不能基于模型,因为模型具有尚未反射(reflect)在数据库中的与升级相关的更改。)我将迁移移到了一个非标准位置,这让服务器启动了,但这使得我不可能再做任何与迁移相关的事情,当然,一旦我移回去,一切都会再次崩溃。 ..
我考虑过只删除我的整个数据库和所有迁移历史记录,使用一组新的初始迁移从头开始构建表,然后从备份中重置数据,但是有几个巨大的表可以做到这一点需要相当长的时间……这看起来更像是核方法。我是否坚持编辑大量非常旧的迁移以与 Django 2.2 兼容而没有实际原因,因为我永远不会将我的项目回滚那么久?这怎么可能是对的?