Menu
CoddyTech

Choix

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

Un genre doit 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 films pourrait limiter les personnes auxquelles 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 enregistrée dans la base de données, "teen", et le libellé que les gens lisent, "13 and over". Dans le code, tu écris Movie.Age.TEEN : une faute de frappe est donc une erreur plutôt qu’une nouvelle valeur. La classe précède 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-même n’effectue pas cette vérification. movie.get_age_display() renvoie le libellé d’une ligne.

challenge icon

Défi

Facile

Attribue un genre à Book. Écris une classe de choix Genre en haut de Book, au-dessus des champs :

  • FICTION : "fiction", "Fiction"
  • SCIFI : "scifi", "Science fiction"
  • MYSTERY : "mystery", "Mystery"
  • HISTORY : "history", "History"

Ajoute ensuite un champ genre, d’une longueur maximale de 20 caractères, limité à ces choix, avec la fiction comme valeur par défaut, sauf si tu en choisis un autre.

Dans l’onglet Shell, saisis Book.Genre.SCIFI.label : cela affiche 'Science fiction'.

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)
quiz iconTestez-vous

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

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