2012-09-27 1 views
7

PostgreSQLでは、デフォルトでNULL値が最も高いとみなされ、降順クエリでは最初に昇順にソートされます。Django ORM内のPostgreSQLからデフォルトのヌルソート動作を変更する方法

この動作は、「NULLS LAST」または「NULLS FIRST」を指定して、クエリまたはインデックス作成時に変更できます。

生のクエリを使用せずにDjango ORMと組み合わせて使用​​するにはどうすればよいですか? I.私がquery_setにqs.order_by("-publish_start")のようなものを追加すると、どのようにNULLをソートすることができますか?または、フィールド/インデックスの宣言に代わるものとして。

答えて

9

私は普遍的であるように思わfalse < trueextraを使用してnullがブール値をチェックすること、およびブール値をソートするときのいずれかの方法(最高または最低値としてnullを)働くDBエンジンを収納する方法を考え出した:

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歳の答えが何であるかです。彼らは時代遅れになる。それのためにdownvoteする必要はありません... –

関連する問題