Django模型按非数据库字段排序

3

我有这个模型:

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')

谢谢。

3个回答

4

请查看Django查询集运算符extra

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',)
)

-1

我不确定你可以这样做。
这是另一种应该有效的方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接