Джанго. Как аннотировать количество объектов из связанной модели

скажем, у меня есть комментарии к модели и ответы к другой модели. Я хочу запросить все комментарии, но также включить в запрос количество ответов, которые есть у каждого комментария. Я думал, что annotate() будет полезен в этом случае, но я просто не знаю, как это записать. Документы пишут, что:

Новое в Django 1.8: предыдущие версии Django позволяли использовать только агрегатные функции в качестве аннотаций. Теперь можно аннотировать модель всеми видами выражений.

Так. Это пример моих моделей:

class Comments(models.Model):
   ...

class Answers(models.Model):
   comment = models.ForeignKey(Comments)

А это пример запроса:

queryset = Comments.objects.all().annotate(...?)

Я не уверен, как аннотировать Count ответов, которые есть в каждом комментарии. То есть, сколько ответов указывает на каждый комментарий в поле FK comment. Это вообще возможно? Есть ли способ лучше? Может лучше просто написать метод на менеджере?


person Alejandro Veintimilla    schedule 26.10.2015    source источник


Ответы (1)


Вам необходимо использовать агрегацию Count:

from django.db.models import Count
comments = Comments.objects.annotate(num_answers=Count('answers'))
person Community    schedule 26.10.2015
comment
Спасибо за ответ. Дополнительное примечание: мне пришлось добавить related_name к моему FK, чтобы заставить его работать. На всякий случай, если кто-то найдет это полезным. - person Alejandro Veintimilla; 28.10.2015