【问题标题】:django.db.utils.IntegrityError: - error persistsdjango.db.utils.IntegrityError: - 错误仍然存​​在
【发布时间】:2020-01-24 06:53:17
【问题描述】:

这个问题已经讨论并回答了here,但是这个错误对我来说仍然存在。由于我没有足够的声誉,因此我无法在该讨论中发表评论。

我已按照回复删除 on_delete=models.SET_DEFAULTdefault=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


【解决方案1】:

尝试以下任何一种:

tutorial_category = models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING,TutorialCategory,verbose_name="Category", null=True)

tutorial_category = models.ForeignKey(on_delete=models.CASCADE,TutorialCategory,verbose_name="Category", null=True)

【讨论】:

  • 两者都不起作用。对于 django.db.models.deletion.DO_NOTHING 错误,因为名称 Django 未定义
  • 有人解决了这个问题吗?在我尝试将一个字段重新定义为 FK 到另一个表后,我自己也遇到了这个问题,我收到一个错误,提示 FK 表中不存在无效值。但是,在我删除 FK 链接后,错误仍然存​​在,并且没有任何工作。就像迁移机制被破坏了一样。
猜你喜欢
  • 2017-02-25
  • 2013-10-20
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
相关资源
最近更新 更多