7

默认情况下,PostgreSQL 将 NULL 值视为最高值,因此将它们首先排序以用于降序查询,最后用于升序查询。

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

如何在不使用原始查询的情况下将其与 Django ORM 结合使用?即当我添加到我的 query_set 中时qs.order_by("-publish_start"),如何指定空值的排序?或者,作为替代方案,在字段/索引声明时。

4

1 回答 1

10

我想出了一种方法,可以通过使用来适应任何一种方式工作的数据库引擎(null 作为最高或最低值)extra,使 null 检查成为布尔值,并且在对布尔值进行排序时false < true似乎是通用的:

qs = qs.extra(select={'null_start': "publish_start is null"},
              order_by=['null_start', '-publish_start'])
于 2012-09-27T23:32:09.750 回答