Sobes.tech
Junior — Middle

Quelle est la principale différence entre les fonctions annotate et aggregate dans Django ORM lors de l'exécution de requêtes?

sobes.tech IA

Réponse de l'IA

Dans Django ORM, les fonctions annotate et aggregate sont utilisées pour travailler avec des données agrégées, mais ont des objectifs différents :

  • annotate ajoute des champs calculés à chaque objet dans le QuerySet. Autrement dit, à chaque enregistrement, on ajoute un champ supplémentaire avec le résultat d'une fonction d'agrégation.

  • aggregate calcule une valeur agrégée pour l'ensemble du QuerySet et renvoie un dictionnaire avec les résultats, sans lien avec des objets individuels.

Exemple :

from django.db.models import Count

# annotate : ajoutons à chaque objet le nombre d'enregistrements liés
auteurs = Author.objects.annotate(book_count=Count('book'))
for auteur in auteurs:
    print(auteur.name, auteur.book_count)

# aggregate : comptons le nombre total de livres de tous les auteurs
total_books = Author.objects.aggregate(total=Count('book'))
print(total_books['total'])