Django 按字段总和排序
可以用Django的ORM来根据两个不同字段的总和对查询结果进行排序吗?
举个例子,我有一个模型,长得像这样:
class Component(models.Model):
material_cost = CostField()
labor_cost = CostField()
我想做的事情是这样的:
component = Component.objects.order_by(F('material_cost') + F('labor_cost'))[0]
但是不幸的是,F对象在'order_by'中似乎不太管用。那在Django中真的能做到吗?
4 个回答
2
使用额外的:
Component.objects.extra(select = {'total_cost' : 'material_cost + labor_cost'},
order_by = ['total_cost',])[0]
15
我觉得是时候给出更好的答案了。因为 Django 团队正在考虑不再支持 extra() 这个功能,所以最好使用 annotate()
配合 F()
表达式来实现相同的效果:
from django.db.models import F
Component.objects.annotate(fieldsum=F('material_cost') + F('labor_cost')).order_by('fieldsum')
20
你可以用 extra
来实现这个功能。
Component.objects.extra(
select={'fieldsum':'material_cost + labor_cost'},
order_by=('fieldsum',)
)
可以查看 官方文档,了解更多信息。