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.
Desafío
FácilAsigna 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)
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
3Páginas desde la base de datos
Una lista desde la base de datosUna página para cada libroPractica por tu cuenta: Playground de Django