Menu
CoddyTech

Jak drukuje się książka

Część sekcji Modele i panel administracyjny ścieżki Django w Coddy. Lekcja 5 z 23.

Naciśnij Run i wpisz Book.objects.all() na karcie Shell: każda książka jest wyświetlana jako <Book: Book object (1)> i nie da się ich od siebie odróżnić. Book.objects.all() pobiera wszystkie książki; wyjaśnia to następny rozdział. Python zamienia obiekt na tekst za pomocą jego metody __str__, a metoda, którą otrzymuje każdy model, wyświetla tylko identyfikator. Model może zdefiniować własną metodę. W przypadku serwisu filmowego metoda Movie może wyświetlać tytuł i rok:

class Movie(models.Model):
    ...

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

W powłoce pojawi się wtedy <Movie: Alien (1979)>, podobnie jak w panelu administracyjnym i każdym szablonie, który wyświetla {{ movie }}. Metoda __str__ musi zwracać tekst. Metoda, która go wyświetla, zwraca None, a wtedy str() kończy się błędem TypeError.

challenge icon

Wyzwanie

Łatwy

W pliku books/models.py spraw, aby książka była wyświetlana jako tytuł, by i autor: Dune by Frank Herbert.

Naciśnij Uruchom i wpisz Book.objects.all() na karcie Shell: każda książka jest teraz wyświetlana jako <Book: Dune by Frank Herbert>.

Spróbuj swoich sił

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)

Wszystkie lekcje w sekcji Modele i panel administracyjny

Poćwicz samodzielnie: Edytor online Django