【发布时间】:2020-05-18 17:07:46
【问题描述】:
假设我有名为“Post”和“Reaction”的模型,我创建了一个 Post,保存了它,现在我想用一个 Reaction 对它做出反应。 现在,当我访问包含帖子列表的提要时,如果我有帖子,我想显示我的反应。
这意味着:
{% if post.my_reaction %}{{ post.my_reaction.contents }}{% endif %}
现在,显然我想加载的不仅仅是一篇文章;没有我的反应的帖子。
我知道我曾经在 PHP 中使用 SQL 来解决这个问题
SELECT * FROM Post
LEFT JOIN Reaction ON Reaction.Post = Post.id AND Reaction.Author = <me>
我的模型:
class Post(models.Model):
content = RichTextField()
author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
datetime = models.DateTimeField(auto_add_now=True)
class Reaction(models.Model):
reaction = models.CharField(max_length=1)
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="reactions")
author = models.ForeignKey(User, on_delete=models.CASCADE)
我不太清楚如何在 Django 中实现这一点
【问题讨论】:
-
你能展示你的models.py吗?
-
也许这就是你要找的东西 - stackoverflow.com/a/37688104/4996863
-
@Charnel 不,这不是我想要的。我正在明确搜索左连接,如果帖子上有我的反应,则查询中的该条目包含反应对象。
-
好的,让我们再问一个问题 - 因为
content是Post模型上的一个字段,所以您唯一需要Reaction的就是知道用户是否对帖子做出了反应?如果是,这似乎是一个简单的布尔标志,可以添加注释。 -
用户每个帖子的反应可以超过 1 条吗?