Как отфильтровать / исключить неактивные комментарии из моего аннотированного запроса Django? - PullRequest
5 голосов
/ 03 декабря 2009

Я использую общее представление object_list, чтобы быстро вывести список статей.К каждой статье прикреплены комментарии.Запрос использует аннотацию для Count() количества комментариев, а затем order_by() для этого аннотированного числа.

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

Комментарии являются частью структуры django.contrib.comments и прикрепляются к модели через общийОтношения.Я добавил явный обратный поиск к своей модели Article:

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 Ответ

2 голосов
/ 03 декабря 2009

Документация для агрегатов объясняет, как это сделать. Вы должны использовать предложение filter, убедившись, что вы поставили его после предложения annotate:

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