Junior — Middle
Jaka jest główna różnica między funkcjami annotate a aggregate w Django ORM podczas wykonywania zapytań?
sobes.tech AI
Odpowiedź od AI
W Django ORM funkcje annotate i aggregate służą do pracy z danymi agregowanymi, ale mają różne cele:
-
annotatedodaje obliczone pola do każdego obiektu w QuerySet. Oznacza to, że do każdego rekordu dodawane jest dodatkowe pole z wynikiem funkcji agregującej. -
aggregateoblicza wartość agregowaną dla całego QuerySet i zwraca słownik z wynikami, bez powiązania z poszczególnymi obiektami.
Przykład:
from django.db.models import Count
# annotate: dodajemy do każdego obiektu liczbę powiązanych rekordów
authors = Author.objects.annotate(book_count=Count('book'))
for author in authors:
print(author.name, author.book_count)
# aggregate: liczymy łączną liczbę książek wszystkich autorów
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])