2012-10-29 109 views
2

我有這樣的模式:Django模型ORDER_BY非數據庫字段

class Foo(models.Model): 
    foo_id = models.IntegerField() 
    foo_old_prize = models.FloatField() 
    foo_new_prize = models.FloatField() 

def get_dif(self): 
    return self.foo_old_prize - self.foo_new_prize 

有一些竅門如何做到這一點Foo.objects.all().order_by('get_dif')

THX

回答

4

查找到extra Django的查詢集操作:

q = Foo.objects.extra(select={'dif': 'foo_old_prize - foo_new_prize'}) 
q = q.extra(order_by = ['dif']) 
3

您可以使用extra此:

Foo.objects.extra(
    select={'diff':'foo_old_prize - foo_new_prize'}, 
    order_by=('diff',) 
) 
0

我不知道你能做到這樣。
下面是應該工作的另一種方法:

objList = Foo.objects.all() 
objList.sort(key = get_dif)