是否可以使用django ORM通过两个不同字段的总和来排序查询集?
例如,我有一个如下所示的模型:
class Component(models.Model):
material_cost = CostField()
labor_cost = CostField()
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
component = Component.objects.order_by(F('material_cost') + F('labor_cost'))[0]
Run Code Online (Sandbox Code Playgroud)
但不幸的是,F对象似乎不适用于'order_by'.django有可能这样吗?
Dan*_*man 18
你可以用extra它.
Component.objects.extra(
select={'fieldsum':'material_cost + labor_cost'},
order_by=('fieldsum',)
)
Run Code Online (Sandbox Code Playgroud)
请参阅文档.
我认为是时候提供更好的答案了。由于django小组正在考虑弃用extra(),因此最好annotate()与F()expression 一起使用:
from django.db.models import F
Component.objects.annotate(fieldsum=F('material_cost') + F('labor_cost')).order_by('fieldsum')
Run Code Online (Sandbox Code Playgroud)
另请参阅https://code.djangoproject.com/ticket/25676