Django模型order_by非db字段

时间:2012-10-29 13:44:18

标签: django sql-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

3 个答案:

答案 0 :(得分:4)

查看extra Django查询集运算符:

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

答案 1 :(得分:3)

您可以使用extra

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

答案 2 :(得分:0)

我不确定你能不能这样做。
这是另一种应该起作用的方法:

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