【Django】order_byメソッドによるソート方法:降順や複数条件によるソート
2023.05.24 /
本記事ではDjangoにおける、order_byメソッドによるソート方法について解説していきます。
作成しているWebアプリケーションで、データベースから取得したデータをソートしたい場面は多々あります。昇順や降順、複数条件によるソートなどソートをするにもいくつか種類が存在します。
Djangoにはソート用のメソッドとしてorder_byメソッドが用意されています。本記事を通して、order_byメソッドの使い方について理解を深めてください。
Djangoの基本的な使い方については以下記事を参考にしてください。
【django】Webサイト・アプリを作成するまでの一連の流れ
Django:order_byメソッドの使い方
order_byメソッドはクエリセットをソートするためのメソッドです。
クエリセット(QuerySet)とはクエリ(Query)によってデータベースから取得したデータリストのことです。クエリ(query)とは、DBMS(データベース管理システム)に対して取得・追加・更新などの処理を要求するための記述方です。Djangoのデータベース操作については以下記事を参考にしてください
【Django】データベース操作(取得・作成・更新・削除):ORMの利用
views.pyでデータベース操作(取得・作成・更新・削除)を行う場合は基本的に以下クエリの構文を使用します。
モデルクラス.マネージャー.メソッド()
上記クエリより取得したデータリスト(QuerySetクエリセット)にorder_byメソッドを使用することでデータをソートできます。
order_byメソッドは以下構文に従って使用します。
order_by(field)
引数のfieldには対象のモデルクラスのフィールドを指定します。指定したフィールドを元にソートを行います。
例えばモデルクラスTaskからすべてのデータを取り出し、フィールドdateで昇順にソートするには以下のようにコードを記述します。
Task.objects.order_by('date')
order_byメソッドの引数に単にフィールド名を指定した場合は昇順でソートされます。
降順でソートする方法
クエリセットのデータを降順にソートする方法としてDjangoには以下の方法が用意されています。
- 引数のフィールド名の前に「-」を付ける
- reverse()メソッドを使用する
引数のフィールド名の前に「-」を付ける
order_byメソッドの引数で指定するソート元にとなるフィールド名の前に「-」を付けることで降順ソートになります。
Task.objects.order_by('-date')
reverse()メソッドを使用する
order_by()メソッドに続けてreverse()メソッドを使用することで降順ソートになります。
Task.objects.order_by('date').reverse()
order_by():複数条件によるソート方法
複数のフィールドでソートをしたい場合は、カンマで区切ってorder_byメソッドの引数に複数のフィールドを指定します。
例えばフィールドdateで降順ソートして、フィールドnameで昇順ソートする場合は次のように記述します。
Task.objects.order_by('-date', 'name',)
order_by():ランダムに並べる
order_byメソッドの引数に「?」を指定することで、クエリセットによるデータリストをランダムに並べることができます。
Task.objects.order_by('?')