Back to questions
Junior — Middle
67
Какое основное отличие между функциями annotate и aggregate в Django ORM при выполнении запросов?
Answer from AI
sobes.tech AI
В Django ORM функции annotate и aggregate используются для работы с агрегатными данными, но имеют разные цели:
-
annotateдобавляет вычисленные поля к каждому объекту в QuerySet. То есть, к каждой записи добавляется дополнительное поле с результатом агрегатной функции. -
aggregateвычисляет агрегатное значение по всему QuerySet и возвращает словарь с результатами, без привязки к отдельным объектам.
Пример:
from django.db.models import Count
# annotate: добавляем к каждому объекту количество связанных записей
authors = Author.objects.annotate(book_count=Count('book'))
for author in authors:
print(author.name, author.book_count)
# aggregate: считаем общее количество книг у всех авторов
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])