Junior — Middle
Jaký je hlavní rozdíl mezi funkcemi annotate a aggregate při provádění dotazů v Django ORM?
sobes.tech AI
Odpověď od AI
V Django ORM se používají funkce annotate a aggregate k práci s agregovanými daty, ale mají různé účely:
-
annotatepřidává vypočtená pole ke každému objektu v QuerySetu. To znamená, že ke každému záznamu je přidáno další pole s výsledkem agregační funkce. -
aggregatevypočítá agregační hodnotu pro celý QuerySet a vrací slovník s výsledky, bez vazby na jednotlivé objekty.
Příklad:
from django.db.models import Count
# annotate: přidává ke každému objektu počet souvisejících záznamů
authors = Author.objects.annotate(book_count=Count('book'))
for author in authors:
print(author.name, author.book_count)
# aggregate: počítá celkový počet knih všech autorů
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])