代码之家  ›  专栏  ›  技术社区  ›  Soviut

如何从带注释的Django查询中筛选/排除非活动注释?

  •  5
  • Soviut  · 技术社区  · 15 年前

    我在用电话 object_list 通用视图,快速列出一组文章。每篇文章都附有评论。该查询使用注释来 Count() 评论的数量,然后 order_by()

    'queryset': Article.objects.annotate(comment_count=Count('comments')).order_by('-comment_count'),
    

    这些评论是报告的一部分 django.contrib.comments 框架和通过通用关系附加到模型。我已将显式反向查找添加到我的文章模型中:

    class Article(models.Models):
       ...
       comments = generic.GenericRelation(Comment, content_type_field='content_type', object_id_field='object_pk')
    

    is_public=False is_removed=True . 我如何才能将任何不活动的评论排除在统计范围之外?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Daniel Roseman    15 年前

    这个 documentation for aggregations 解释如何执行此操作。你需要使用 filter 子句,确保你把它 这个 annotate 条款:

    Article.objects.annotate(comment_count=Count('comments')).filter(
         comment__is_public=True, comment__is_removed=False
    ).order_by('-comment_count')