領域

2010-07-01 200 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]