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.
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
1Votre premier modèle
Votre premier modèleTypes de champs3Des pages issues de la base de données
Une liste issue de la base de donnéesUne page pour chaque livreEntraînez-vous par vous-même : Playground Django