Menu
CoddyTech

Wie ein Buch ausgegeben wird

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

Klicke auf „Run“ und gib im Tab „Shell“ Book.objects.all() ein: Jedes Buch wird als <Book: Book object (1)> angezeigt, und du kannst sie nicht auseinanderhalten. Python wandelt ein Objekt mithilfe seiner __str__-Methode in Text um; die Methode, die jedes Modell standardmäßig erhält, zeigt nur die ID an. Ein Modell kann seine eigene Methode definieren. Movie auf einer Filmseite könnte den Titel und das Jahr ausgeben:

class Movie(models.Model):
    ...

    def __str__(self):
        return f"{self.title} ({self.released.year})"

Die Shell zeigt dann <Movie: Alien (1979)> an, ebenso wie die Admin-Oberfläche und jedes Template, das {{ movie }} ausgibt. __str__ muss den Text zurückgeben. Eine Methode, die ihn ausgibt, gibt None zurück, und dann schlägt str() mit einem TypeError fehl.

challenge icon

Aufgabe

Einfach
  • Lass ein Buch seinen Titel und Autor ausgeben, zum Beispiel Dune by Frank Herbert.

Beim Ausführen dieser Lektion werden vier Bücher hinzugefügt. Klicke auf „Ausführen“ und gib Book.objects.all() im Shell-Tab ein.

Probier es selbst

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)

Alle Lektionen in Modelle und Admin-Bereich

Übe selbstständig: Django-Playground