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 „Ausführen“ und gib Book.objects.all() im Tab „Shell“ ein: Jedes Buch wird als <Book: Book object (1)> angezeigt, und du kannst sie nicht voneinander unterscheiden. Book.objects.all() fragt alle Bücher ab; das nächste Kapitel erklärt das. Python wandelt ein Objekt mithilfe seiner __str__-Methode in Text um, und die Methode, die jedes Modell erhält, zeigt nur die ID an. Ein Modell kann eine 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})"

In der Shell wird dann <Movie: Alien (1979)> angezeigt, ebenso im Admin-Bereich und in jeder Vorlage, die {{ movie }} ausgibt. __str__ muss den Text zurückgeben. Eine Methode, die ihn ausgibt, gibt None zurück, und str() schlägt dann mit einem TypeError fehl.

challenge icon

Aufgabe

Einfach

Sorge in books/models.py dafür, dass ein Buch mit seinem Titel, by und seinem Autor ausgegeben wird: Dune by Frank Herbert.

Klicke auf „Ausführen“ und gib Book.objects.all() im Tab „Shell“ ein: Jedes Buch wird nun so angezeigt: <Book: Dune by Frank Herbert>.

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