Sobes.tech
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:

  • annotate př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.

  • aggregate vypočí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'])