Aggregate
Aggregate tạo ra các giá trị kết quả (tóm tắt) trên toàn bộ QuerySet. Tổng hợp hoạt động trên tập hợp hàng để nhận một giá trị duy nhất từ tập hợp hàng. (Ví dụ: tổng của tất cả các giá trong tập hợp hàng). Aggregate được áp dụng trên toàn bộ QuerySet và nó tạo ra các giá trị kết quả (tóm tắt) trên toàn bộ QuerySet.
Trong mô hình:
class Books(models.Model):
name = models.CharField(max_length=100)
pages = models.IntegerField()
price = models.DecimalField(max_digits=5, decimal_places=3)
Trong vỏ bọc:
>>> Books.objects.all().aggregate(Avg('price'))
# Above code will give the Average of the price Column
>>> {'price__avg': 34.35}
Annotate
Annotate tạo một bản tóm tắt độc lập cho từng đối tượng trong QuerySet. (Có thể nói nó lặp lại từng đối tượng trong QuerySet và áp dụng thao tác)
Trong mô hình:
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')
Đang xem:
videos = Video.objects.values('id', 'name','video').annotate(Count('user_likes',distinct=True)
Ở chế độ xem, nó sẽ tính số lượt thích cho mỗi video
.annotate()
trên một qs một mình không đạt được db, nhưng gọiq[0].num_authors
thì không? Tôi giả sửaggregate
phải luôn nhấn db vì nó là một mệnh đề đầu cuối?