Menu
CoddyTech

Comment un livre s’affiche

Fait partie de la section Modèles et interface d’administration du Journey Django de Coddy. Leçon 5 sur 23.

Appuie sur « Jouer » et saisis Book.objects.all() dans l’onglet Shell : chaque livre affiche <Book: Book object (1)>, et tu ne peux pas les distinguer. Book.objects.all() demande tous les livres ; le chapitre suivant l’explique. Python transforme un objet en texte à l’aide de sa méthode __str__, et celle que chaque modèle obtient par défaut n’affiche que l’identifiant. Un modèle peut définir la sienne. Le modèle Movie d’un site de films pourrait afficher son titre et son année :

class Movie(models.Model):
    ...

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

Le shell affiche alors <Movie: Alien (1979)>, tout comme l’interface d’administration et n’importe quel modèle qui affiche {{ movie }}. __str__ doit renvoyer le texte. Une méthode qui l’affiche renvoie None, et str() échoue alors avec une TypeError.

challenge icon

Défi

Facile

Dans books/models.py, faites en sorte qu’un livre s’affiche avec son titre, by et son auteur : Dune by Frank Herbert.

Cliquez sur « Jouer » et saisissez Book.objects.all() dans l’onglet Shell : chaque livre s’affiche maintenant ainsi : <Book: Dune by Frank Herbert>.

Essayez vous-même

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)

Toutes les leçons de Modèles et interface d’administration

Entraînez-vous par vous-même : Playground Django