Agregar
agregado genera valores de resultado (resumen) en todo un QuerySet. El agregado opera sobre el conjunto de filas para obtener un valor único del conjunto de filas (por ejemplo, la suma de todos los precios en el conjunto de filas). El agregado se aplica en todo el QuerySet y genera valores de resultado (resumen) en todo un QuerySet.
En modelo:
class Books(models.Model):
name = models.CharField(max_length=100)
pages = models.IntegerField()
price = models.DecimalField(max_digits=5, decimal_places=3)
En Shell:
>>> Books.objects.all().aggregate(Avg('price'))
# Above code will give the Average of the price Column
>>> {'price__avg': 34.35}
Anotar
Anotar generar un resumen independiente para cada objeto en un QuerySet. (Podemos decir que iterar cada objeto en un QuerySet y aplicar la operación)
En modelo:
class Video(models.Model):
name = models.CharField(max_length=52, verbose_name='Name')
video = models.FileField(upload_to=document_path, verbose_name='Upload
video')
created_by = models.ForeignKey(User, verbose_name='Created by',
related_name="create_%(class)s")
user_likes = models.ManyToManyField(UserProfile, null=True,
blank=True, help_text='User can like once',
verbose_name='Like by')
En vista:
videos = Video.objects.values('id', 'name','video').annotate(Count('user_likes',distinct=True)
A la vista, contará los me gusta de cada video.
.annotate()
en un qs solo no llega a la base de datos, pero llamarq[0].num_authors
sí? Supongoaggregate
que siempre debe presionar la base de datos, ya que es una cláusula terminal.