Sobes.tech
Junior — Middle

Mis on peamine erinevus funktsioonide annotate ja aggregate vahel Django ORM-i päringute täitmisel?

sobes.tech AI

Vastus AI-lt

Django ORM-s kasutatakse annotate ja aggregate funktsioone, et töötada kokkuvõtlike andmetega, kuid neil on erinevad eesmärgid:

  • annotate lisab iga objekti kohta arvutatud väljad QuerySetis. Teisisõnu, iga kirje juurde lisatakse täiendav väli koos agregatsioonifunktsiooni tulemusega.

  • aggregate arvutab kogu QuerySeti kohta kokkuvõtliku väärtuse ja tagastab tulemused sõnastikus, mis ei ole seotud üksikute objektidega.

Näide:

from django.db.models import Count

# annotate: lisame iga objekti juurde seotud kirje arvu
authors = Author.objects.annotate(book_count=Count('book'))
for author in authors:
    print(author.name, author.book_count)

# aggregate: arvutame kõigi autorite kogukogumiku arv
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])