本注解介绍了聚合、聚合的操作。常用的聚合操作如平均值、总计、最大值、最小值等。使用的模型如下classAuthor(models.Model):name=models.CharField(max_length=100)age=models.IntegerField()class发布者(models.Model):name=models.CharField(max_length=300)classBook(models.Model):name=models.CharField(max_length=300)pages=models.IntegerField()价格=models.DecimalField(max_digits=10、decimal_places=2)rating=models.FloatField()authors=models.ManyToManyField(Author)publisher=models.ForeignKey(Publisher,on_delete=models.CASCADE)pubdate=models.DateField()classStore(models.Model):name=models.CharField(max_length=300)books=models.ManyToManyField(Book)聚合函数Avg-AverageCount-TotalMax-MaximumMin-MinimumSum-Totaloutput_field-指定输出数据格式下面是一些聚合操作的例子。由于Avg、Max、Min的运算方式相同,故以一个函数为例。获取表中的最大值:fromdjango.db.modelsimportMax,Min,AvgBook.objects.all().aggregate(Avg('price'))对应的SQL为:selectavg(price)fromblog_book;返回值指定聚合类型为:{'price__avg':Decimal('5.500000')}返回。因为Book中的price字段是一个Decimal字段,所以聚合后返回的数据类型也是这个类型。如果要替换为Float类型,可以使用output_field指定输出类型:Book.objects.all().aggregate(Avg('price',output_field=models.FloatField()))返回结果:{'price__avg':5.5}指定聚合字段名Book.objects.aggregate(avg_price=Avg("price"))上面用到的例子都是Avg的平均值,用最大值Max代替,最小值Min都是可能的多次聚合操作假设我们不仅需要平均值,还需要最大值,最小值等,我们可以直接操作fromdjango.db.modelsimportAvg,Max,MinBook.objects.aggregate(avg_price=Avg("price"),max_price=Max("price"),min_priceinonestatement=Min("price"))关联表的聚合操作对于Store模型来说,是多对多的账本关系。如果想获取Store数据中最大Book的价格数据:Store.objects。aggregate(min_price=Min("books__price"))如果有多个表链关联,也可以直接获取链聚合:Store.objects.aggregate(youngest_age=Min("books__authors__age"))以上就是本次笔记的全部内容,其实还有一些聚合操作,就是annotate的一些使用例子。我不会在这里详细介绍。有时间的话,可以开个特别的笔记。接下来要注意的是Django中SQL中groupby用法的对应操作。做一个大概的介绍。
