dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2198
  • 铜币13984枚
  • 威望6066点
  • 银元155个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:233回复:0

如何使用 django ORM 计算求和?

楼主#
更多 发布于:2019-04-09 13:58
目标
1. 求 photos总数量,计算 photos 之和。
2. 求 bill总价格,计算 photos 与 price列乘积。

models 类
# bill
class Bill(models.Model):
    name = models.CharField('姓名', max_length=25)
    photos = models.PositiveIntegerField('数量')
    price = models.FloatField('单价')
    # 省略...
    created_time = models.DateTimeField('创建时间', auto_now_add=True)

    class Meta:
        ordering = ['-received_time']
        verbose_name = '账单'
        verbose_name_plural = '账单'

方法
>>> from pps.models import Bill
>>> from django.db.models import Count, Sum, Q, F, FloatField
>>> bill = Bill.objects.all()

# bill 有 204行数据
>>> bill.count()
204

# 计算 photos 之和
>>> bill.aggregate(Sum('photos'))
{'photos__sum': 2909}

计算 photos 与 price列乘积之和
>>> bill.aggregate(amount=Sum(F('photos')*F('price'), output_field=FloatField()))
{'amount': 6256.0}

知识点
aggregate 类, Sum 类, Q类,F 类

参考:
https://www.v2ex.com/t/242765
https://docs.djangoproject.com/en/1.8/topics/db/aggregation/
#
欢迎关注微信公众号: 运维录
游客

返回顶部