我有一个名为Article
的模型,并且有一个名为Comment
的模型,该模型具有一个Article
的外键。我想从一个Article
查询集中算出该查询集中的所有评论。
示例:我有一个包含5篇文章的查询集,每篇文章都有3条评论,但其中一条除外。 ->这应该返回12。
另一个例子:一篇文章有3条评论,另一篇文章有5条评论,其他文章没有评论。 ->这应该返回8。
我尝试过:
Article.objects.all().annotate(comments_count=Count("comment", filter=Q(is_deleted=False))).comments_count
答案 0 :(得分:3)
您应该.aggregate(..)
[Django-doc],而不是 [Django-doc]。注释为原始查询集中的每个项目添加了一个值。因此,我们可以生成如下查询:annotate(..)
Article.objects.aggregate(
comments_count=Count('comment', filter=Q(comment__is_deleted=False))
)['comments_count']
尽管在这里使用Comment
模型本身可能更简单,例如:
Comment.objects.filter(
is_deleted=False,
article__in=my_article_qs
).count()