Django-与过滤器相关的计数

时间:2019-05-25 17:25:20

标签: python django

我有一个名为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

1 个答案:

答案 0 :(得分:3)

您应该.aggregate(..) [Django-doc],而不是annotate(..) [Django-doc]。注释为原始查询集中的每个项目添加了一个值。因此,我们可以生成如下查询:

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()