Menu
CoddyTech

選択肢

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

ジャンルは任意のテキストではなく、いくつかの値の中から選ぶべきです。choicesオプションを使うと、列挙クラスで指定したリストにフィールドの値を制限できます。映画サイトでは、映画の対象年齢を制限できます。

class Movie(models.Model):
    class Age(models.TextChoices):
        ALL = "all", "All ages"
        TEEN = "teen", "13 and over"
        ADULT = "adult", "18 and over"

    age = models.CharField(max_length=10, choices=Age, default=Age.ALL)

各メンバーには、データベースに保存される値("teen")と、ユーザーに表示されるラベル("13 and over")があります。コードではMovie.Age.TEENと書くため、タイプミスは新しい値になるのではなく、エラーになります。このクラスは、それを使うフィールドより前に定義します。

フォームと管理画面ではラベルがドロップダウンに表示され、ほかの値は受け付けません。データベース自体は値をチェックしません。movie.get_age_display()は、その行のラベルを返します。

challenge icon

チャレンジ

簡単

Bookにジャンルを設定します。フィールドの上に、選択肢クラスGenreを書きます。

  • FICTION: "fiction", "Fiction"
  • SCIFI: "scifi", "Science fiction"
  • MYSTERY: "mystery", "Mystery"
  • HISTORY: "history", "History"

次に、最大20文字で、これらの選択肢に限定され、別のものを選ばない限りfictionが初期値となるフィールドgenreを追加します。

ShellタブでBook.Genre.SCIFI.labelと入力すると、'Science fiction'が表示されます。

自分で試してみよう

from django.db import models


class Book(models.Model):
    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)
quiz icon腕試し

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

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

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