Django删除OneToOneField

时间:2019-02-03 10:44:42

标签: python django django-models

我正在创建Django网络应用。我有一个名为的应用vote。我想通过与其他应用程序的OneToOne关系“注册”该应用程序。例如,我有一个文章应用,我想“注册”投票:

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)

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

1 个答案:

答案 0 :(得分:1)

这是正确的行为。您要删除文章并希望删除其投票。因此您应该将关系(一对一)放在Vote模型上,而不是文章上。因此,替换:

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

收件人:

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

但是在投票模型上。

  

请注意:不要使用默认和空对此案

此外,您可以阅读此Link,以了解在何处放置关系以及级联如何删除该关系。