Menu
CoddyTech

Opciones

Parte de la sección Modelos y el panel de administración del Journey de Django de Coddy. Lección 4 de 23.

Un género debería ser uno de unos pocos valores, no cualquier texto. La opción choices limita un campo a una lista, definida como una clase de enumeración. Un sitio de películas podría limitar para quién es una película:

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)

Cada miembro tiene el valor almacenado en la base de datos, "teen", y la etiqueta que leen las personas, "13 and over". En el código escribes Movie.Age.TEEN, así que un error tipográfico es un error, en lugar de un valor nuevo. La clase va antes del campo que la usa.

Los formularios y el administrador muestran las etiquetas en un menú desplegable y rechazan otros valores; la propia base de datos no los comprueba. movie.get_age_display() devuelve la etiqueta de una fila.

challenge icon

Desafío

Fácil

Asigna un género a Book. Escribe una clase de opciones Genre al principio de Book, antes de los campos:

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

Después, añade un campo genre, de hasta 20 caracteres, limitado a esas opciones, con ficción como valor predeterminado, a menos que elijas otra.

En la pestaña Shell, escribe Book.Genre.SCIFI.label: imprime 'Science fiction'.

Pruébalo tú mismo

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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Modelos y el panel de administración

Practica por tu cuenta: Playground de Django