Django ORM,多列之和
Django ORM, sum of multiple columns
我对如何按多列的 SUM 进行过滤有疑问。
示例:
class Foo(models.Model):
i1 = models.IntegerField()
i2 = models.IntegerField()
i3 = models.IntegerField()
并且我需要过滤 i1、i2、i3 的 SUM 小于 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
谢谢。
您可以使用 F(), and with annotation:
Foo.objects.annotate(i_sum=F('i1') + F('i2')+ F('i3')).filter(i_sum=200)
您可以使用extra
Foo.objects.extra(where=["i1 + i2 + i3 > 200"])
我对如何按多列的 SUM 进行过滤有疑问。
示例:
class Foo(models.Model):
i1 = models.IntegerField()
i2 = models.IntegerField()
i3 = models.IntegerField()
并且我需要过滤 i1、i2、i3 的 SUM 小于 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
谢谢。
您可以使用 F(), and with annotation:
Foo.objects.annotate(i_sum=F('i1') + F('i2')+ F('i3')).filter(i_sum=200)
您可以使用extra
Foo.objects.extra(where=["i1 + i2 + i3 > 200"])