Opções
Parte da seção Models e o Admin do Journey de Django da Coddy. Lição 4 de 23.
Um gênero deve ter um entre alguns valores, e não qualquer texto. A opção choices limita um campo a uma lista, definida como uma classe de enumeração. Um site de filmes poderia limitar a classificação indicativa de um filme:
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 membro tem o valor armazenado no banco de dados, "teen", e o rótulo que as pessoas leem, "13 and over". No código, você escreve Movie.Age.TEEN, então um erro de digitação gera um erro, em vez de criar um novo valor. A classe vem antes do campo que a utiliza.
Os formulários e o admin exibem os rótulos em um menu suspenso e rejeitam outros valores; o próprio banco de dados não faz essa verificação. movie.get_age_display() retorna o rótulo de uma linha.
Desafio
FácilDê um gênero a Book:
- Dentro de
Book, uma classe de opçõesGenre:FICTION("fiction","Fiction"),SCIFI("scifi","Science fiction"),MYSTERY("mystery","Mystery"),HISTORY("history","History"). - Um campo
genre, com até 20 caracteres, limitado a essas opções, com ficção como padrão, a menos que você escolha outra.
Na aba Shell, experimente Book.Genre.SCIFI.label.
Experimente você mesmo
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 lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Models e o Admin
Pratique por conta própria: Playground de Django