Choix
Fait partie de la section Modèles et interface d’administration du Journey Django de Coddy. Leçon 4 sur 23.
Un genre devrait correspondre à l’une de quelques valeurs, et non à n’importe quel texte. L’option choices limite un champ à une liste, définie sous forme de classe d’énumération. Un site de cinéma pourrait limiter le public auquel un film est destiné :
class Movie(models.Model):
class Age(models.TextChoices):
ALL = "all", "All ages"
TEEN = "teen", "13 and over"
ADULT = "adult", "18 and over"
age = models.CharField(max_length=10, choices=Age, default=Age.ALL)Chaque membre possède la valeur stockée dans la base de données, "teen", et le libellé affiché aux utilisateurs, "13 and over". Dans le code, tu écris Movie.Age.TEEN : une faute de frappe provoque donc une erreur au lieu de créer une nouvelle valeur. La classe est définie avant le champ qui l’utilise.
Les formulaires et l’interface d’administration affichent les libellés dans une liste déroulante et refusent les autres valeurs ; la base de données, elle, n’effectue aucune vérification. movie.get_age_display() renvoie le libellé d’une ligne.
Défi
FacileAttribue un genre à Book :
- À l’intérieur de
Book, une classe de choixGenre:FICTION("fiction","Fiction"),SCIFI("scifi","Science fiction"),MYSTERY("mystery","Mystery"),HISTORY("history","History"). - Un champ
genre, limité à 20 caractères, avec uniquement ces choix ; sa valeur par défaut est la fiction, sauf si tu en choisis une autre.
Dans l’onglet Shell, essaie Book.Genre.SCIFI.label.
Essayez vous-même
from django.db import models
class Book(models.Model):
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)
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Modèles et interface d’administration
3Des 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