Django queryset order_(按绝对值)

2024-04-26 14:05:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个查询集,它有一个description属性和一个balance属性。目前,当我生产queryset时,它是从最小到最大的顺序--

Model.objects.order_by('balance')

#output

Thing1          -120000
Thing2             -300
Thing3             7000
Thing4           100000

我想按绝对值递减,结果是:

^{pr2}$

我尝试过在order_by()中传递各种方法,但我认为它必须是一个SQL类型的参数-我无法理解。我发现了在注释时使用func expression的{a1}。{{cd5}没什么用。在

有没有办法用这种方式订购查询集?在


Tags: outputbymodel属性objects顺序orderdescription
2条回答

您可以注释绝对值并按注释值排序。您可以使用-符号表示降序:

from django.db.models import Func, F

Model.objects.annotate(abs_balance=Func(F('balance'), function='ABS')).order_by('-abs_balance')

@neverwalakoner的Answer非常好,但是在处理datetime对象时不起作用,例如,如果您想按对象到某个特定时间戳的距离排序。在

例如:

queryset.annotate(
    distance=Func(F('datetime') - datetime_goal, function='ABS')
).order_by('distance')

ProgrammingError: function abs(interval) does not exist失败,这在question中有解释。在

在这种情况下,可以使用Case表达式来模拟绝对值,如下所示:

^{pr2}$

相关问题 更多 >