Sobes.tech
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'])