Sobes.tech
Junior — Middle

Koja je glavna razlika između funkcija annotate i aggregate prilikom izvršavanja upita u Django ORM?

sobes.tech АИ

Одговор од АИ

U Django ORM-u, funkcije annotate i aggregate koriste se za rad sa agregiranim podacima, ali imaju različite svrhe:

  • annotate dodaje izračunate kolone svakom objektu u QuerySet-u. To znači da se svakom zapisu dodaje dodatno polje sa rezultatom agregacione funkcije.

  • aggregate izračunava agregatnu vrednost za ceo QuerySet i vraća rečnik sa rezultatima, bez veze sa pojedinačnim objektima.

Primer:

from django.db.models import Count

# annotate: dodajemo svakom objektu broj povezanih zapisa
authors = Author.objects.annotate(book_count=Count('book'))
for author in authors:
    print(author.name, author.book_count)

# aggregate: računamo ukupan broj knjiga svih autora
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])