2010-07-01 29 views
10

Có thể sử dụng ORM django để đặt hàng một queryset bằng tổng của hai trường khác nhau không?Thứ tự Django_by tổng của các trường

Ví dụ, tôi có một mô hình trông như thế này:

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

và tôi muốn làm một cái gì đó như thế này:

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

Nhưng thật không may, F đối tượng dường như không làm việc với 'order_by'. Là một điều như vậy có thể với django?

+0

http://stackoverflow.com/questions/476017/django-queryset-order-by-method/476033#476033 –

+0

Không hẳn những gì tôi đang tìm kiếm. Phương thức đó tổng kết một trường nhất định trên tất cả các đối tượng liên quan. (Trong ví dụ cụ thể đó, nó tính tổng giá trị của tất cả các phiếu có liên quan.) Tôi cần tổng hợp hai trường trên đối tượng gốc. Vì vậy, tôi không thể sử dụng bộ tổng hợp Sum, trừ khi có một cách để sử dụng nó mà tôi không biết. – So8res

Trả lời

17

Bạn có thể sử dụng extra cho việc này.

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

Xem the documentation.

2

Sử dụng thêm:

Component.objects.extra(select = {'total_cost' : 'material_cost + labor_cost'}, 
            order_by = ['total_cost',])[0] 
Các vấn đề liên quan