Skip to main content
 首页 » 编程设计

python之Django之与过滤器相关的计数

2024年08月13日47zhenyulu

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

请您参考如下方法:

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

Article.objects.<b>aggregate</b>( 
    comments_count=Count('comment', filter=Q(comment__is_deleted=False)) 
)<b>['comments_count']</b>

尽管在这里使用 Comment 模型本身可能更简单,例如:

<b>Comment</b>.objects.filter( 
    is_deleted=False, 
    article__in=<i>my_article_qs</i> 
)<b>.count()</b>