【问题标题】:Django ORM, sum of multiple columnsDjango ORM,多列的总和
【发布时间】:2023-03-14 04:01:01
【问题描述】:

我有一个关于如何按多列的总和进行过滤的问题。

例子:

class Foo(models.Model):
    i1 = models.IntegerField()
    i2 = models.IntegerField()
    i3 = models.IntegerField()

我需要过滤 i1、i2、i3 的总和小于 200 的对象。 我已经尝试通过以下方式实现它:

Foo.objects.agregate(i_sum=Sum(i1,i2,i3)).filter(i_sum__lt=200) # error
Foo.objects.agregate(i_sum=Sum([i1,i2,i3])).filter(i_sum__lt=200) # error

谢谢。

【问题讨论】:

    标签: django django-orm django-aggregation


    【解决方案1】:

    你可以使用F()with annotation

    Foo.objects.annotate(i_sum=F('i1') + F('i2')+ F('i3')).filter(i_sum=200)
    

    【讨论】:

    • 谢谢,这真的很明显。 Sum 是某种垂直运算,但我需要水平运算。
    • 很高兴为您提供帮助
    【解决方案2】:

    您可以使用extra

    Foo.objects.extra(where=["i1 + i2 + i3 > 200"])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-16
      • 2011-02-12
      • 2016-10-06
      • 2016-09-25
      • 2019-02-26
      • 2020-04-18
      • 2019-09-08
      • 2020-01-19
      相关资源
      最近更新 更多