Menu
CoddyTech

選択肢

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

ジャンルは任意のテキストではなく、いくつかの値のうちの1つであるべきです。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にジャンルを追加します。

  • Bookの内部に、選択肢クラスGenreを作成します。選択肢はFICTION("fiction"、"Fiction")、SCIFI("scifi"、"Science fiction")、MYSTERY("mystery"、"Mystery")、HISTORY("history"、"History")です。
  • 最大20文字で、これらの選択肢に限定され、別のものを選ばない限りフィクションが初期値となるフィールドgenreを追加します。

ShellタブでBook.Genre.SCIFI.labelを試してください。

自分で試してみよう

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プレイグラウンド