Django聚合:两个字段相乘的总和

发布于 2021-01-29 15:06:05

我有一个类似这样的模型:

class Task(models.Model):
    progress = models.PositiveIntegerField()
    estimated_days = models.PositiveIntegerField()

现在,我想Sum(progress * estimated_days)在数据库级别进行计算。使用Django聚合,我可以获取每个字段的总和,但不能获取字段相乘的总和。

关注者
0
被浏览
71
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    更新: 对于 Django > = 1.8,请遵循@kmmbvnr提供的答案

    可以使用Django ORM:

    这是您应该做的:

    from django.db.models import Sum
    
    total = ( Task.objects
                .filter(your-filter-here)
                .aggregate(
                    total=Sum('progress', field="progress*estimated_days")
                 )['total']
             )
    

    注意:如果两个字段的类型不同,例如integerfloat,则应将要返回的类型作为的第一个参数传递Sum

    这是一个较晚的答案,但我想它将帮助寻找相同内容的人。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看