【发布时间】:2019-11-26 19:13:43
【问题描述】:
我一直在将一个 Django 项目移植到 Python 3 和 Django 2。我必须按照 Django 2 的要求将 on_delete 添加到我的所有具有外键的模型中。现在我已经尝试对这些更改进行迁移TypeError: __init__() missing 1 required positional argument: 'on_delete'.
它引用的文件是 0002 迁移文件,而不是已更新的模型文件。我不知道如何解决这个问题。我尝试伪造迁移,但仍然遇到同样的错误。
我不确定为什么它认为数据库不存在,我已经检查过,一切都完好无损并且在 Postgres 中工作。有什么想法吗?
【问题讨论】:
-
是的,
ForeignKey和OneToOneField上的on_delete=字段现在是必需的。您应该修复迁移文件。 -
这不是进行迁移以便将它们添加到迁移中的目的吗?如果我将它们添加到以前运行的迁移文件(例如 0002)中,那将如何工作?
-
但是你说你升级了 Django 版本。因此,现在您让 Django-2.0 框架解释由 Django-1.x 框架编写的代码。 Django 不是 100% 向后兼容的。发行说明中列出了例外情况。在以前的 Django 版本中,这些不是必需的。
-
我确实升级了版本,并且我还在我的 models.py 中添加了必要的字段。如果我错了,请纠正我,但据我了解 1)它应该忽略 0002 文件,因为它已经运行过;2)当我更新 models.py 文件时,迁移应该进行相应的更改,以便记录下来供其他人使用.
-
不会每次都解释迁移文件。由于迁移文件调用
ForeignKey构造函数,它会出错。您已经应用它们的事实是无关紧要的。由于 Django 将解释这些以创建一个 有向无环图,它将拓扑排序以运行可能尚未运行的迁移。
标签: python django django-2.0