2010-07-01 19 views
10

İki farklı alanın toplamı ile queryset siparişi vermek için django ORM kullanmak mümkün mü?Django order_by alanların toplamı

Örneğin, ben şöyle bir model var:

class Component(models.Model): 
    material_cost = CostField() 
    labor_cost = CostField() 

ve ben böyle bir şey yapmak istiyorum:

component = Component.objects.order_by(F('material_cost') + F('labor_cost'))[0] 

Ama ne yazık ki, F nesneleri çalışmak görünmüyor 'order_by' ile. Django ile böyle bir şey mümkün mü?

+0

http://stackoverflow.com/questions/476017/django-queryset-order-by-method/476033#476033 aradığım Değil tamamen ne –

+0

. Bu yöntem tüm ilgili nesneler boyunca belirli bir alanı toplar. (Bu örnekte, ilgili tüm oyların değerini özetlemektedir.) Orijinal nesnede iki alanı toplamalıyım. Bu yüzden, bildiğim şekilde kullanmamanın bir yolu olmadığı sürece, Sum toplayıcıyı kullanamıyorum. – So8res

cevap

17

Bunun için extra kullanabilirsiniz.

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

Bkz. the documentation. Ekstra

2

Kullanım:

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