Menu
CoddyTech

Come viene stampato un libro

Fa parte della sezione Modelli e pannello di amministrazione del percorso Django di Coddy. Lezione 5 di 23.

Premi Esegui e digita Book.objects.all() nella scheda Shell: ogni libro viene visualizzato come <Book: Book object (1)> e non puoi distinguerli. Book.objects.all() richiede tutti i libri; il prossimo capitolo lo spiega. Python trasforma un oggetto in testo con il suo metodo __str__, e quello che ogni modello riceve mostra solo l'id. Un modello può definirne uno proprio. Il Movie di un sito di film potrebbe stampare il titolo e l'anno:

class Movie(models.Model):
    ...

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

La shell mostrerà quindi <Movie: Alien (1979)>, così come l'interfaccia di amministrazione e qualsiasi template che stampa {{ movie }}. __str__ deve restituire il testo. Un metodo che lo stampa restituisce None e quindi str() genera un TypeError.

challenge icon

Sfida

Facile

In books/models.py, fai in modo che un libro venga visualizzato con il titolo, by e il nome dell’autore: Dune by Frank Herbert.

Premi «Esegui» e digita Book.objects.all() nella scheda Shell: ora ogni libro viene visualizzato così: <Book: Dune by Frank Herbert>.

Provalo tu

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)

Tutte le lezioni di Modelli e pannello di amministrazione

Esercitati da solo: Playground Django