首页 > 解决方案 > Django 删除 OneToOneField

问题描述

我正在创建一个 Django 网络应用程序。我有一个名为vote. 我想通过 OneToOne-Relationship 将这个应用程序“注册”到其他应用程序。例如,我有一个文章应用程序,我想“注册”投票:

vote = models.OneToOneField(Vote, on_delete=models.CASCADE, default=None, null=True)

我更改了文章的保存方法:

def save(self, *args, **kwargs):
    self.vote = Vote.objects.create()
    super().save(*args, **kwargs)

问题是:我希望在删除文章时删除投票,但这不起作用。当我删除文章时,只有文章将被删除并且投票仍然存在。

标签: pythondjangodjango-models

解决方案


那是正确的行为。您想删除一篇文章并希望删除它的投票。所以你应该把你的关系(一对一)放在Vote模型上,而不是文章上。所以替换:

vote = models.OneToOneField(Vote, on_delete=models.CASCADE, default=None, null=True)

至:

article = models.OneToOneField(Article, on_delete=models.CASCADE)

但是在投票模型上。

请注意:在这种情况下不要使用 default 和 null。

此外,您可以阅读此链接以了解将关系放在何处以及级联将如何删除它。


推荐阅读