デフォルトの並び順
CoddyのDjangoジャーニー「モデルと管理サイト」セクションの一部。レッスン 6/23。
本は、約束された順序ではなく、データベースが返す順序で戻ってきます。モデルで一度順序を設定すれば、別の順序を要求しないすべてのクエリに適用されます。フィールドごとではなく、モデル全体のオプションは、Metaという名前の内部クラスに記述します。
class Movie(models.Model):
...
class Meta:
ordering = ["-released", "title"]orderingはフィールド名のリストです。名前だけを指定すると、小さい値から大きい値へ、テキストならAからZへ並べ替えます。先頭にマイナスを付けると逆順になるため、この例では新しい映画が先に並びます。2つ目の名前は同順位の場合に使われます。同じ日に公開された映画はAからZの順に並びます。
チャレンジ
簡単books/models.pyで、特に並び順が指定されていないときは、書籍がタイトルのアルファベット順(AからZ)で表示されるようにしてください。
「実行」を押して、ShellタブでBook.objects.all()と入力してください。最初にDune、最後にThe Hobbitが表示されます。
自分で試してみよう
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プレイグラウンド