django - 从 1.11 迁移到 Django 2.2——外键中没有 on_delete 的旧迁移破坏了一切

标签 django upgrade django-migrations django-2.2

<分区>

我正在努力将我的遗留应用程序从 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 兼容而没有实际原因,因为我永远不会将我的项目回滚那么久?这怎么可能是对的?

最佳答案

作为Iain Shelvington在问题下的评论中提到,

First delete all of your migration files and folder, then run makemigrations with the "on_delete" - this should create some "initial" migration files. Then you'll have to log in to your DB and delete all entries for your apps and then you need to run manage.py migrate --fake - this will enter into the DB entries for the newly created migrations but will not apply them

关于django - 从 1.11 迁移到 Django 2.2——外键中没有 on_delete 的旧迁移破坏了一切,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59260770/

相关文章:

namespaces - 由于命名空间更改,服务结构升级失败

meteor - 错误 : missing tool for os. windows.x86_32 在meteor-tool@1.6.0

python - Django/makemigrations ModuleNotFoundError : No module named 'idmp_core.apps.IdmpCoreConfigdjango' ; 错误

python - Django:为初始组提供迁移

python - mysql-connector-python cursor_cent.py 文件上的 Django 迁移错误 'TypeError: sequence item 1: expected a bytes-like object, str found'

python - 如何在 Django 中使用外键?

python - 我可以在 Django 1.3 中使 STATICFILES_DIR 与 STATIC_ROOT 相同吗?

node.js - 升级到Angular 5后编译错误

Django:如何使用 DRY 原则覆盖第 3 方 View ?

django - 无法使用普通的 Ubuntu Linux 用户访问 Django 中的 PostgreSQL 数据库