デフォルトの並び順
CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 6/23。
本は、順序が保証されないまま戻ってきます。データベースが返す順序になります。モデルでは、別の順序を指定しないすべてのクエリに対して、順序を一度設定できます。フィールドごとではなくモデル全体に適用するオプションは、Metaという名前の内部クラスに記述します。
class Movie(models.Model):
...
class Meta:
ordering = ["-released", "title"]orderingはフィールド名のリストです。名前だけを指定すると、小さい順から大きい順に並び、テキストの場合はAからZの順になります。名前の前にマイナスを付けると逆順になるため、この例では公開日の新しい映画が先に並びます。2つ目の名前は同順位を解消します。同じ日に公開された映画はAからZの順に並びます。
チャレンジ
簡単- 並び順の指定がない場合は、書名の昇順で本が表示されるようにしましょう。
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}"
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
モデルと管理サイトのすべてのレッスン
自分で練習してみよう: Djangoプレイグラウンド