【发布时间】:2020-01-24 06:53:17
【问题描述】:
这个问题已经讨论并回答了here,但是这个错误对我来说仍然存在。由于我没有足够的声誉,因此我无法在该讨论中发表评论。
我已按照回复删除 on_delete=models.SET_DEFAULT 和 default=1 以运行初始迁移,但是我收到以下错误:
*tutorial_category = models.ForeignKey(TutorialCategory,verbose_name="Category", null=True)
TypeError: __init__() missing 1 required positional argument: 'on_delete'*
我假设它需要“on_delete”字段,并尝试了on_delete.PROTECT and CASCADE,但这带来了原始错误:
*"django.db.utils.IntegrityError: The row in table 'main_tutorial' with primary key '1' has an invalid foreign key: main_tutorial.tutorial_series_id contains a value 'tutorial_series_id' that does not have a corresponding value in main_tutorialseries.id."*
我使用的是 Django 2.2.9,如有任何关于如何设置外键的帮助,将不胜感激。
谢谢!
【问题讨论】:
-
您是否在第一次迁移时遇到错误?或者您之前是否在该应用中运行过迁移?
-
有多个失败的迁移,在尝试不同的 on_delete 值之前,从迁移文件夹中删除了所有这些(留下 init.py)。没有一个成功
-
我测试了您引用的帖子中的代码,它按原样工作。没有迁移错误 - 没有。所以这可能不是问题。过去,当错误的迁移已被放入数据库时,我也遇到过类似的问题。是否可以让整个项目重新开始,即创建一个新的 django 项目,复制所有代码并从那里迁移?
-
我感觉以前的迁移会导致问题。可以重新开始,因为我只是在做一个学习教程。当我转移到一个实际项目时,在尝试任何迁移之前最好只备份吗?我猜如果你破坏它就没有调试能力
-
备份总是一个好主意。事实上,可以恢复中途失败的迁移。如果迁移在接触数据库之前失败,则只需像您一样删除迁移文件即可。如果数据库已被触及,除了删除文件之外,您还需要打开数据库并从表 django_migrations 中删除迁移失败的行。但要小心:始终从最后一次迁移开始
标签: django django-models generic-foreign-key