python - 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)
问题是:我希望在删除文章时删除投票,但这不起作用。当我删除文章时,只有文章将被删除并且投票仍然存在。
解决方案
那是正确的行为。您想删除一篇文章并希望删除它的投票。所以你应该把你的关系(一对一)放在Vote
模型上,而不是文章上。所以替换:
vote = models.OneToOneField(Vote, on_delete=models.CASCADE, default=None, null=True)
至:
article = models.OneToOneField(Article, on_delete=models.CASCADE)
但是在投票模型上。
请注意:在这种情况下不要使用 default 和 null。
此外,您可以阅读此链接以了解将关系放在何处以及级联将如何删除它。
推荐阅读
- jwt - 如何在登录时在 JWT 令牌中从 Azure Active Directory 传递自定义扩展属性?
- ios - 致命异常:NSInternalInconsistencyException 上下文已经有一个协调器;无法替代
- python - fetchall() 抛出“以前的 SQL 不是查询”。用于删除查询
- heroku - heroku - 找不到该进程类型(网络)
- asp.net - 配置 Docker 以使用代理服务器
- graphql - 错误:`@scalarList` 的策略参数的有效值为:RELATION
- xpath - xQuery 按类别分组输出
- c# - 强制 MVC CookieAuthentication 提前超时,然后设置滑动和绝对过期的组合
- php - 在面积图中设置动态图形
- d3.js - 将条形图的标签文本旋转 90 度