문제

나는 사용하고있다 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. 비활성 주석을 계산할 때 어떻게 제외 할 수 있습니까?

도움이 되었습니까?

해결책

그만큼 집계에 대한 문서 이 작업을 수행하는 방법을 설명합니다. 당신은 a를 사용해야합니다 filter 조항, 당신이 그것을 넣는지 확인하십시오 ~ 후에 그만큼 annotate 절:

Article.objects.annotate(comment_count=Count('comments')).filter(
     comment__is_public=True, comment__is_removed=False
).order_by('-comment_count')
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top