Agregat
Agregat menghasilkan nilai hasil (ringkasan) di seluruh QuerySet. Agregat beroperasi melalui kumpulan baris untuk mendapatkan nilai tunggal dari kumpulan baris. (Misalnya jumlah semua harga di kumpulan baris). Agregat diterapkan di seluruh QuerySet dan menghasilkan nilai hasil (ringkasan) di seluruh QuerySet.
Dalam Model:
class Books(models.Model):
name = models.CharField(max_length=100)
pages = models.IntegerField()
price = models.DecimalField(max_digits=5, decimal_places=3)
Di Shell:
>>> Books.objects.all().aggregate(Avg('price'))
# Above code will give the Average of the price Column
>>> {'price__avg': 34.35}
Annotate
Annotate menghasilkan ringkasan independen untuk setiap objek dalam QuerySet. (Kita dapat mengatakan iterasi setiap objek dalam QuerySet dan menerapkan operasi)
Dalam Model:
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')
Dalam penglihatan:
videos = Video.objects.values('id', 'name','video').annotate(Count('user_likes',distinct=True)
Dalam tampilan ini akan menghitung suka untuk setiap video
.annotate()
pada qs saja tidak mengenai db, tetapi pemanggilanq[0].num_authors
tidak? Saya berasumsiaggregate
harus selalu menekan db karena itu adalah klausa terminal?