如何使用 Django 查询为模型获取两个不同的十进制字段中的较大者?
例如,如果我有一个模型 Month,其中包含名为 income_actual 和income_projected 的字段,我如何返回更大的值?
我以前使用过 MySQL GREATEST() 函数来执行此操作,但我无法弄清楚如何在 Django 中执行此操作。
如何使用 Django 查询为模型获取两个不同的十进制字段中的较大者?
例如,如果我有一个模型 Month,其中包含名为 income_actual 和income_projected 的字段,我如何返回更大的值?
我以前使用过 MySQL GREATEST() 函数来执行此操作,但我无法弄清楚如何在 Django 中执行此操作。
Have you looked into using the extra method?
Month.objects.extra(select={'max_income': 'greatest(income_actual, income_projected)'})
EDIT:
You're not going to be able to use that through the ORM without writing raw SQL. Although you could use some python magic:
sum(month['max_income'] for month in Month.objects.extra(select={'max_income': 'greatest(income_actual, income_projected)'}).values('max_income'))
您可以使用Django 的 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
当您想严格使用 SQL 时,@drewman 已经为您提供了版本。我会做一些不同的事情,并向模型添加一个动态计算正确版本的属性。
class model(models.Model):
....
@property
def income(self):
return max(self.income_actual, self.income_real)