주석이 달린 django 쿼리에서 비활성 주석을 필터링/제외하는 방법은 무엇입니까?
문제
나는 사용하고있다 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')
제휴하지 않습니다 StackOverflow