2

我正在尝试删除UserDjango 应用程序中的一个对象,但是IntegrityError在删除User. 相关对象如下所示:

class Unfollowing(models.Model):
    source = models.ForeignKey(User, related_name='unfollowings_by')
    target = models.ForeignKey(User, related_name='unfollowings_of')
    created_on = models.DateTimeField(auto_now_add=True)

但是在删除 a 时User,我收到如下错误:

IntegrityError:更新或删除表“auth_user”违反了表“core_unfollowing”上的外键约束“source_id_refs_id_5b69e09fc6161c2a”
详细信息:键(id)=(6439)仍然从表“core_unfollowing”中引用。

这是怎么回事?Unfollowing删除关联对象时不应该自动删除相关对象User吗?对于它的价值,我on_delete=models.CASCADE为两者添加了一个显式Unfollowing.sourceUnfollowing.target(即使这是默认设置),我仍然得到同样的错误。

4

1 回答 1

2

这确实很奇怪。这是我会尝试的几件事:

首先,您是否在添加后更新了数据库架构on_delete=models.CASCADE?如果没有,它不会产生任何影响。您可以通过直接转储数据库模式来仔细检查是否ON DELETE CASCADE已激活,而不是从 Django 中找出来。

在我看来,这比 Django 更像是一个与数据库引擎相关的错误。如果您ON DELETE CASCADE在 auth_user 表和相关表中激活了 100% 肯定,那么您可以尝试直接从您的 sql 客户端删除用户。如果它有效,并且同一个用户给你带来了 Django 的麻烦(或类似的用户,因为你删除了第一个用户),那么尝试转储 Django 正在执行的 SQL 查询并从你的 sql 客户端重复它。

这是我会采取的方法。此外,检查特定用户或每个用户是否发生这种情况,检查未关注表中的悬挂引用。也许还有一张你曾经拥有的旧桌子,这就是给你带来问题的一张桌子。

我将直接将研究重点放在数据库和 sql 客户端上,在我设法让它在那里工作之后,回到 Django。

这更像是我将遵循的路径而不是答案,因为这似乎是一个非常具体的问题。

我希望这可能会有所帮助。

祝你好运!

于 2013-06-22T04:13:33.730 回答