django annotate和aggregate

两者都是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')}

猜你喜欢

转载自blog.csdn.net/yangjiajia123456/article/details/88420430