Как отфильтровать / исключить неактивные комментарии из моего аннотированного запроса 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
. Как я могу исключить любые неактивные комментарии из подсчета?1 ответ:
Документация по агрегациямобъясняет, как это сделать. Вам нужно использовать предложение
filter
, убедившись, что вы ставите его после предложенияannotate
:Article.objects.annotate(comment_count=Count('comments')).filter( comment__is_public=True, comment__is_removed=False ).order_by('-comment_count')