2012-09-27 53 views
7

PostgreSQL默認將NULL值視爲最高值,因此首先將它們排序爲降序查詢,最後排序爲升序排序。如何在Django ORM中從PostgreSQL更改默認的空排序行爲

您可以通過指定'NULLS LAST'或'NULLS FIRST'來修改每個查詢或創建索引時的行爲。

如何在不需要使用原始查詢的情況下將它與Django ORM結合使用? 也就是說當我添加到我的query_set類似qs.order_by("-publish_start"),我如何指定空值排序?或者,作爲替代,在字段/索引聲明時。

回答

9

我想通了,容納DB引擎,通過使用extra,使得空查布爾和排序布爾false < true當工作無論哪種方式(null作爲最高或最低值)的方式似乎是普遍的:

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

值得說明的是(因爲我很慢,而且花了我一段時間才弄清楚)如果你希望結果首先是NULL值,然後'publish_start'命令ASCending,則需要反轉order_by語句: '['-null_start','publish_start']'。 –

+0

'extra'已被刪除,請參閱http://stackoverflow.com/a/35494930/15690。 – blueyed

+0

@blueyed是的,這是4年前堆棧溢出的答案。它們變得過時了。不需要爲此付諸表決...... –