Menu
CoddyTech

デフォルトの並び順

CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 6/23。

本は、順序が保証されないまま戻ってきます。データベースが返す順序になります。モデルでは、別の順序を指定しないすべてのクエリに対して、順序を一度設定できます。フィールドごとではなくモデル全体に適用するオプションは、Metaという名前の内部クラスに記述します。

class Movie(models.Model):
    ...

    class Meta:
        ordering = ["-released", "title"]

orderingはフィールド名のリストです。名前だけを指定すると、小さい順から大きい順に並び、テキストの場合はAからZの順になります。名前の前にマイナスを付けると逆順になるため、この例では公開日の新しい映画が先に並びます。2つ目の名前は同順位を解消します。同じ日に公開された映画はAからZの順に並びます。

challenge icon

チャレンジ

簡単
  • 並び順の指定がない場合は、書名の昇順で本が表示されるようにしましょう。

Run を押して Data タブを開くと、4冊の本がAからZの順に表示されます。Shell タブの Book.objects.all() でも同じ順序が表示されます。

自分で試してみよう

from django.db import models


class Book(models.Model):
    class Genre(models.TextChoices):
        FICTION = "fiction", "Fiction"
        SCIFI = "scifi", "Science fiction"
        MYSTERY = "mystery", "Mystery"
        HISTORY = "history", "History"

    title = models.CharField(max_length=200)
    author = models.CharField(max_length=100)
    year = models.IntegerField()
    price = models.DecimalField(max_digits=6, decimal_places=2)
    is_read = models.BooleanField(default=False)
    finished = models.DateField(null=True, blank=True)
    summary = models.TextField(blank=True)
    genre = models.CharField(max_length=20, choices=Genre, default=Genre.FICTION)

    def __str__(self):
        return f"{self.title} by {self.author}"
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

モデルと管理サイトのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド