Junior — Middle
¿Cuál es la principal diferencia entre las funciones annotate y aggregate en Django ORM al realizar consultas?
sobes.tech AI
Respuesta de la IA
En Django ORM, las funciones annotate y aggregate se utilizan para trabajar con datos agregados, pero tienen diferentes propósitos:
-
annotateañade campos calculados a cada objeto en el QuerySet. Es decir, a cada registro se le añade un campo adicional con el resultado de una función de agregación. -
aggregatecalcula un valor agregado para todo el QuerySet y devuelve un diccionario con los resultados, sin estar ligado a objetos individuales.
Ejemplo:
from django.db.models import Count
# annotate: añadimos a cada objeto el número de registros relacionados
autores = Author.objects.annotate(book_count=Count('book'))
for autor in autores:
print(autor.name, autor.book_count)
# aggregate: contamos el número total de libros de todos los autores
total_libros = Author.objects.aggregate(total=Count('book'))
print(total_libros['total'])