Django ORMのorder_byメソッド完全ガイド – 効果的なクエリの並べ替えテクニック

はじめに

DjangoのORM(Object-Relational Mapping)は、データベースの操作を直感的かつ効率的に行うための強力なツールです。特にorder_byメソッドは、データを特定の順序で表示する際に非常に役立ちます。

この記事では、オンライン書籍アプリケーションを例に、order_byメソッドの多様な使い方をご紹介します。

order_byメソッドの基本的な使い方

まずはorder_byメソッドの基本的な使い方から見ていきましょう。以下のモデルを例に考えます。

from django.db import models

class Book(models.Model):
    title = models.CharField(max_length=100)
    author = models.CharField(max_length=100)
    published_date = models.DateField()
    rating = models.IntegerField()

例1: 昇順で並べ替え

書籍を発行日で昇順に並べ替えるには、以下のように書きます。

books = Book.objects.order_by('published_date')

例2: 降順で並べ替え

降順で並べ替えたい場合は、フィールド名の前にハイフンを付けます。

books = Book.objects.order_by('-published_date')

複数のフィールドを使った並べ替え

order_byメソッドでは、複数のフィールドを指定して並べ替えることもできます。

例3: 複数フィールドでの並べ替え

例えば、評価が高い順に並べた後、同じ評価の場合は発行日の新しい順に並べたい場合は次のようにします。

books = Book.objects.order_by('-rating', 'published_date')

関連フィールドでの並べ替え

関連するモデルのフィールドを使って並べ替えることもできます。

例4: 関連モデルのフィールドを使った並べ替え

例えば、書籍がジャンルに分類されているとします。ジャンルモデルが以下のように定義されているとしましょう。

class Genre(models.Model):
    name = models.CharField(max_length=100)
    books = models.ManyToManyField(Book)

この場合、ジャンル名で書籍を並べ替えたい場合は以下のようにします。

books = Book.objects.order_by('genre__name')
タイトルとURLをコピーしました