我正在使用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
的人。如何排除任何不活动的评论?
答案 0 :(得分:2)
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')