如何在 Django ORM 中更改 PostgreSQL 的默认空排序行为
Posted
技术标签:
【中文标题】如何在 Django ORM 中更改 PostgreSQL 的默认空排序行为【英文标题】:How to change default null sorting behavior from PostgreSQL in the Django ORM 【发布时间】:2012-09-19 10:08:27 【问题描述】:默认情况下,PostgreSQL 将 NULL 值视为最高值,因此对于降序查询将它们排序在最前面,在升序查询时将它们排在最后。
您可以通过指定“NULLS LAST”或“NULLS FIRST”在每次查询或创建索引时修改此行为。
如何将它与 Django ORM 结合使用,而无需使用原始查询?
IE。当我向我的 query_set 添加 qs.order_by("-publish_start")
之类的内容时,如何指定空值排序?或者,作为替代方案,在字段/索引声明时。
【问题讨论】:
【参考方案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 年前的答案。它们变得过时了。无需为此投反对票...以上是关于如何在 Django ORM 中更改 PostgreSQL 的默认空排序行为的主要内容,如果未能解决你的问题,请参考以下文章