5

object_list 일반보기를 사용하여 기사 모음을 빠르게 나열합니다. 각 기사에는 그것에 첨부 된 주석이 있습니다. 이 쿼리는 주석을 Count()에 사용하고 주석 번호는 order_by()입니다.주석 달린 Django 쿼리에서 비활성 주석을 필터링/제외하는 방법은 무엇입니까?

'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입니다. 비활성 댓글이 집계되지 않도록 제외하려면 어떻게해야합니까?

답변

2

documentation for aggregations에는이를 수행하는 방법이 설명되어 있습니다. 당신은 당신이 그것을 annotate 절을 넣어 확인하고하는 filter 절을 사용해야합니다

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

것하지 여부 그들은이 공공/제거 의견에 따라 해당 필터 기사? – Jiaaro

+0

그것은 효과가있는 것처럼 보이지만 짐이 말한 것이 일어나지 않았는지 확인하기 위해 조사를 할 것입니다. – Soviut

+0

내가 한주의 사항 중 하나는 의견이있는 기사 만 반환하고 제외하지 않은 기사는 제외된다는 것입니다. – Soviut

관련 문제