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 Run et saisis Book.objects.all() dans l’onglet Shell : chaque livre s’affiche comme <Book: Book object (1)>, et tu ne peux pas les distinguer. Python transforme un objet en texte à l’aide de sa méthode __str__, et celle que reçoit chaque modèle n’affiche que l’id. Un modèle peut définir la sienne. Dans un site de films, Movie 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
  • Fais afficher un livre sous la forme de son titre et de son auteur, comme Dune by Frank Herbert.

Le bouton Run de cette leçon ajoute quatre livres. Appuie sur Run et saisis Book.objects.all() dans l’onglet Shell.

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