我正在创建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)
这是问题所在: 我希望在删除文章时删除投票,但这不起作用。 当我删除文章时,只有文章会被删除,投票仍然存在。
答案 0 :(得分:1)
这是正确的行为。您要删除文章并希望删除其投票。因此您应该将关系(一对一)放在Vote
模型上,而不是文章上。因此,替换:
vote = models.OneToOneField(Vote, on_delete=models.CASCADE, default=None, null=True)
收件人:
article = models.OneToOneField(Article, on_delete=models.CASCADE)
但是在投票模型上。
请注意:不要使用默认和空对此案
此外,您可以阅读此Link,以了解在何处放置关系以及级联如何删除该关系。