Джанго - Подсчет, связанный с фильтром - PullRequest
2 голосов
/ 25 мая 2019

У меня есть модель с именем Article, и у меня есть модель с именем Comment, которая имеет иностранный ключ для Article. Я хочу посчитать из Article набора запросов все комментарии в этом наборе запросов.

Пример: у меня есть набор запросов с 5 статьями, и у каждой статьи есть 3 комментария, кроме одного. -> Это должно вернуть 12.

Другой пример: одна статья имеет 3 комментария, а другая - 5, а другие статьи не имеют комментариев. -> Это должно вернуть 8.

Я попробовал это с:

Article.objects.all().annotate(comments_count=Count("comment", filter=Q(is_deleted=False))).comments_count

1 Ответ

3 голосов
/ 25 мая 2019

Вы должны .aggregate(..) [Джанго-док] здесь, а не annotate(..) [Джанго-док] .Аннотирование добавляет значение к каждому элементу в исходном наборе запросов.Таким образом, мы можем сгенерировать запрос вроде:

Article.objects.<b>aggregate</b>(
    comments_count=Count('comment', filter=Q(comment__is_deleted=False))
)<b>['comments_count']</b>

Хотя здесь может быть проще использовать саму модель Comment, например:

<b>Comment</b>.objects.filter(
    is_deleted=False,
    article__in=<i>my_article_qs</i>
)<b>.count()</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...