Djangoのquerysetで逆順で取得したいときにreverse()を使う時の注意点

今回はDjangoのquerysetで逆順で取得したいときにreverse()を使う時の注意点についてご紹介したいと思います。



Djangoのquerysetで逆順で取得したいときにreverse()を使う時の注意点

結論として、querysetで逆順で取得したいときは、querysetで取ってくるときにorder_byを指定してあげたものに対してでしかreverse()は適用されません。

例として次のBookモデルがあるとします。

DBの中身は現在こんな感じだったとします。

Bookオブジェクトが3つあり、titleとauthorについてそれぞれ分かりやすい名前でDBに格納されています。

まず間違った使い方として、普通にquerysetのallを使って取得してreverse()をかけてみます。
実行結果は次の通りになります。

実行結果から分かる通りまったく逆順になっておりません。
実はreverse()は既に順番が定義されているquerysetに対してにしか効果を発揮しないのです。

試しにBook.objects.all()を使うときにorder_byを使ってidの昇順で取るようにしてみましょう。
するとreverse()を使用した場合の実行結果は次のように変わります。

ちゃんとreverse()を使ったときに順序が逆順になっていますね。

Djangoのquerysetのreverse()を使うときは順序が指定されているquerysetでないと効果を発揮しないことを覚えておきましょう。

終わりに

今回はDjangoのquerysetで逆順で取得したいときにreverse()を使う時の注意点についてご紹介いたしました。

最後までお読みいただきありがとうございます。
ブログやTwitterでのシェアOKです。
コメントもお待ちしております。
誤植や勘違いなどございましたらコメント欄にて教えていただけると幸いです。






Django

Posted by ちこ