codecamp

Django4.0 聚合-在QuerySet上生成聚合

Django 提供了两种生成聚合的方法。第一种方法是从整个 ​QuerySet ​生成汇总值。比如你想要计算所有在售书的平均价格。Django 的查询语法提供了一种用来描述所有图书集合的方法:

>>> Book.objects.all()

可以通过在 ​QuerySet ​后添加 ​aggregate()​ 子句来计算 ​QuerySet ​对象的汇总值。

>>> from django.db.models import Avg
>>> Book.objects.all().aggregate(Avg('price'))
{'price__avg': 34.35}

本例中的 ​all()​ 是多余的,所以可以简化成这样的:

>>> Book.objects.aggregate(Avg('price'))
{'price__avg': 34.35}

传递给 ​aggregate()​ 的参数描述了我们想要计算的聚合值。在这个例子里,要计算的就是 Book 模型上的 price 字段的平均值。
aggregate()​ 是 QuerySet 的一个终端子句,使用后将返回“name-value”的字典,其中“name”就是聚合值的标志,“value”就是计算出的聚合结果。“name”是根据字段名和聚合函数而自动生成的。如果你想指定一个聚合值的名称,你可以在指定聚合子句的时候提供指定的名称:

>>> Book.objects.aggregate(average_price=Avg('price'))
{'average_price': 34.35}

如果你想生成更多的聚合内容,你需要在 ​aggregate()​ 子句中加入其它参数即可。所以,如果我们也想知道所有书中最高和最低的价格,我们可以写这样的查询:

>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
{'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}


Django4.0 聚合-速查表
Django4.0 聚合-在QuerySet中的每一个条目生成聚合
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

Django4.0 模型和数据库

Django4.0 处理HTTP请求

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }