两者都是django的聚合函数
annotate的每个参数是一个annotation,参数表达式可以是简单的值、模型(或任何关联模型)上的字段的引用或聚合表达式(总和、平均值等),它们与QuerySet中的对象的相关对象进行了计算,返回的是一系列的QuerySet对象。
aggregate参数同上,返回一个包含汇总值(平均值、总和等)的字典。
from django.db import models
from django.db.models import Count, Max, Min
class Blog(models.Model):
name = models.CharField(max_length=100)
tagline = models.TextField()
def __str__(self): # __unicode__ on Python 2
return self.name
class Book(models.Model):
unique = models.CharField(max_length=50)
name = models.CharField(max_length=200)
pages = models.SmallIntegerField()
price = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return self.name
Blog.objects.annotate(Count('id'))
<QuerySet [<Blog: aaa>, <Blog: bbb>]
Blog.objects.aggregate(Count('id'))
{'id__count': 2}
Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
{'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}