Django查询相当于MySQL GREATEST函数?

时间:2013-01-01 10:35:03

标签: django

如何使用Django查询为模型获取两个不同的十进制字段中的较大字段?

例如,如果我有一个名为income_actual和income_projected的字段的模型月,我该如何返回更大的值?

我之前使用过MySQL GREATEST()函数来做这件事,但我不知道如何在Django中做到这一点。

3 个答案:

答案 0 :(得分:3)

您是否考虑过使用extra方法?

Month.objects.extra(select={'max_income': 'greatest(income_actual, income_projected)'})

修改

如果不编写raw SQL,您将无法通过ORM使用它。虽然你可以使用一些python魔法:

sum(month['max_income'] for month in Month.objects.extra(select={'max_income': 'greatest(income_actual, income_projected)'}).values('max_income'))

答案 1 :(得分:0)

@drewman在你想严格使用SQL时已经给了你版本。我会做一些不同的事情,并为模型添加一个动态计算正确版本的属性。

class model(models.Model):
    ....

    @property
    def income(self):
        return max(self.income_actual, self.income_real)

答案 2 :(得分:0)

您可以使用Django's Database Function Greatest

例如,您可以使用此类查询:

>>> from django.db.models.functions import Greatest

>>> months = Month.objects.annotate(greatest_income=Greatest('income_actual', 'income_projected').all()

# now you can access the greatest value using something like this:
>>> months[0].greatest_income