Django 在注释中获取相关对象的 QuerySet



My Models

class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
#Unnecessary
class Comment(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user_comments")
post = models.ForeignKey(Post, on_delete=models.CASCADE,related_name="post_comments")
liked_users = models.ManyToManyField(User, blank=True, related_name="liked_comments")
disliked_users = models.ManyToManyField(User, blank=True related_name="disliked_comments")
#Unnecessary

What I Have

通常,我使用这段代码使我的注释对象具有属性"voting";并按属性排序。

comments = models.Comment.objects.filter(post=post).annotate(voting=Count("liked_users")-Count("disliked_users")).order_by("-voting")

但是当我想查询帖子时,我无法到达他们的评论:

我想要什么

我想要我的QuerySet "posts";每个帖子都有一个属性,叫做"best_3_comments"。这是一个由他们的voting排序的评论的QuerySet。

每次查询帖子时,我可以在不查询所有评论的情况下实现这一点吗?

posts = models.Post.objects.annotate(
best_3_comments = get_query_of_the_posts_comments("post_comments").annotate(
voting=Count("liked_users")-Count("disliked_users")
).order_by("-voting")[:3]
)

我可以用什么函数来查询帖子的评论,我应该怎么做?我完全接受新的想法和方法来实现我想要的目标,我找不到哪个功能和如何使用它。

提前谢谢你。

我找到了一个解决方案。我想把它分享给那些将来寻找解决类似我的问题的方法的人。

posts = models.Post.objects.all() # The QuerySet You Want To Use
for post in posts:
post.best_3_comments = models.Comment.objects.filter(post=post).annotate(voting=Count("liked_users")-Count("disliked_users")).order_by("-voting")[:3]

解决方案是遍历QuerySet,为所有包含QuerySet的QuerySet分配一个属性。

相关内容

  • 没有找到相关文章

最新更新