领域

2010-07-01 199 views
10

的Django的ORDER_BY总和是否有可能使用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可以这样做吗?

+0

http://stackoverflow.com/questions/476017/django-queryset-order-by-method/476033#476033 – 2010-07-01 18:57:44

+0

不太什么,我一直在寻找。该方法将所有相关对象中的某个字段相加。 (在特定的例子中,总结的所有相关的票值。)我需要原始对象上总结两个字段。因此,我不能使用Sum聚合,除非有使用它,我不知道的一种方式。 – So8res 2010-07-01 19:07:59

回答

17

您可以使用extra这一点。

Component.objects.extra(
    select={'fieldsum':'material_cost + labor_cost'}, 
    order_by=('fieldsum',) 
) 

请参阅the documentation

2

使用额外的:

Component.objects.extra(select = {'total_cost' : 'material_cost + labor_cost'}, 
            order_by = ['total_cost',])[0]