Menu
CoddyTech

Auswahlmöglichkeiten

Teil des Abschnitts Modelle und Admin-Bereich der Django-Journey von Coddy. Lektion 4 von 23.

Ein Genre sollte einen von wenigen Werten annehmen, nicht beliebigen Text. Die Option choices beschränkt ein Feld auf eine Liste, die als Aufzählungsklasse angegeben wird. Eine Film-Website könnte einschränken, für wen ein Film geeignet ist:

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)

Jedes Element hat den in der Datenbank gespeicherten Wert "teen" und die für Menschen lesbare Bezeichnung "13 and over". Im Code schreibst du Movie.Age.TEEN, sodass ein Tippfehler einen Fehler verursacht, statt einen neuen Wert zu erzeugen. Die Klasse steht vor dem Feld, das sie verwendet.

Formulare und die Admin-Oberfläche zeigen die Bezeichnungen in einem Dropdown-Menü an und weisen andere Werte zurück; die Datenbank selbst prüft sie nicht. movie.get_age_display() gibt die Bezeichnung einer Zeile zurück.

challenge icon

Aufgabe

Einfach

Gib Book ein Genre. Schreibe eine Auswahlklasse Genre am Anfang von Book, oberhalb der Felder:

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

Füge dann ein Feld genre mit bis zu 20 Zeichen hinzu, das auf diese Auswahlmöglichkeiten beschränkt ist und standardmäßig „fiction“ verwendet, sofern du nichts anderes auswählst.

Gib im Shell-Tab Book.Genre.SCIFI.label ein: Es gibt 'Science fiction' aus.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Modelle und Admin-Bereich

Übe selbstständig: Django-Playground