我正在尝试删除Django应用中的User
对象,但在删除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)
但是在删除User
时,我收到如下错误:
IntegrityError:表“auth_user”上的更新或删除违反了表“core_unfollowing”上的外键约束“source_id_refs_id_5b69e09fc6161c2a”
DETAIL:Key(id)=(6439)仍然从“core_unfollowing”表中引用。
这笔交易是什么?删除关联的Unfollowing
时,是否应自动删除相关的User
个对象?为了它的价值,我向on_delete=models.CASCADE
和Unfollowing.source
添加了一个明确的Unfollowing.target
(即使这是默认设置),我仍然遇到同样的错误。
答案 0 :(得分:1)
这确实很奇怪。这是我要尝试的几件事:
首先,您在添加on_delete=models.CASCADE
后更新了数据库架构吗?如果没有,它将不起任何作用。您可以通过直接转储数据库架构来仔细检查是否已激活ON DELETE CASCADE
,而不是从Django中找出它。
对我而言,这是一个比Django更多的数据库引擎相关错误。如果您在auth_user表和相关表中激活了100%肯定ON DELETE CASCADE
,那么您可以尝试直接从您的SQL客户端删除用户。如果它工作,并且同一个用户给你Django(或类似用户,因为你删除了第一个)的麻烦,然后尝试转储Django正在做的SQL查询并从你的SQL客户端重复它。
这是我要采取的方法。另外,检查特定用户或每个用户是否发生这种情况,检查Unfollowing表中的挂起引用。也许还有一个你曾经拥有的旧桌子,那就是给你带来问题的桌子。
我会直接将研究重点放在数据库和SQL客户端上,然后我设法让它在那里工作,然后回到Django。
这是我所遵循的路径而不是答案,因为这似乎是一个非常具体的问题。
我希望这可能会有所帮助。
祝你好运!