【问题标题】:How to change default null sorting behavior from PostgreSQL in the Django ORM如何在 Django ORM 中更改 PostgreSQL 的默认空排序行为
【发布时间】:2012-09-19 10:08:27
【问题描述】:

默认情况下,PostgreSQL 将 NULL 值视为最高值,因此对于降序查询将它们排序在最前面,在升序查询时将它们排在最后。

您可以通过指定“NULLS LAST”或“NULLS FIRST”在每次查询或创建索引时修改此行为。

如何将它与 Django ORM 结合使用,而无需使用原始查询? IE。当我向我的 query_set 添加 qs.order_by("-publish_start") 之类的内容时,如何指定空值排序?或者,作为替代方案,在字段/索引声明时。

【问题讨论】:

    标签: django postgresql orm


    【解决方案1】:

    我想出了一种方法,通过使用extra,使空检查成为布尔值,并且在对布尔值进行排序时,false < true 似乎是通用的:

    qs = qs.extra(select={'null_start': "publish_start is null"},
                  order_by=['null_start', '-publish_start'])
    

    【讨论】:

    • 值得说明的是(因为我很慢,我花了一段时间才弄清楚)如果你希望结果首先是 NULL 值,然后publish_start 排序 ASCending,你需要反转 order_by 语句:['-null_start', 'publish_start'].
    • @blueyed 是的,这就是堆栈溢出中 4 年前的答案。它们变得过时了。无需为此投反对票...
    猜你喜欢
    • 2014-05-14
    • 2011-06-20
    • 2017-12-30
    • 2011-06-12
    • 1970-01-01
    • 2018-08-31
    • 2012-05-06
    • 2010-10-19
    相关资源
    最近更新 更多