Na construção de um formulário, há casos em que precisamos de um campo para armazenar determinadas opções para um atributo. Um exemplo claro deste caso é o armazenamento do sexo de um usuário, que só deve permitir uma determinada lista de opções (masculino, feminino, outro).
Para estes casos, o Django ORM permite que criemos uma lista com as possíveis opções que deverão ser selecionadas, evitando que o usuário possa digitar qualquer valor naquele campo.
Sendo assim, neste artigo veremos como trabalhar com choices
no Django ORM.
Criando choices no models.py
Para criar uma lista de possíveis opções no Django ORM, precisamos definir quais serão estas opções e a qual chave ela pertence. Por exemplo, se quisermos criar uma lista de opções para o campo sexo
, determinamos o seguinte conteúdo no arquivo models.py
do nosso projeto:
class Cliente(models.Model):
SEXO_CHOICES = (
("F", "Feminino"),
("M", "Masculino"),
("N", "Nenhuma das opções")
)
nome = models.CharField(max_length=100, null=False, blank=False)
sexo = models.CharField(max_length=1, choices=SEXO_CHOICES, blank=False, null=False)
data_nascimento = models.DateField(null=False, blank=False)
email = models.EmailField(null=False, blank=False)
def __str__(self):
return self.nome
Curso Django - Banco de dados com Django ORM - Parte 1
Conhecer o cursoNote que precisamos criar a variável SEXO_CHOICES
e determinar quais as opções que um sexo
poderá exercer. Depois disso, criamos o campo sexo
em nosso model e determinamos que as opções disponíveis para este campo estão definidas na variável SEXO_CHOICES
. Com isso, sempre que o formulário para cadastro (ou edição) de um cliente for submetido, o Django irá verificar se uma das opções foi selecionada. Caso positivo, libera a requisição, caso negativo, alerta ao usuário que apenas estas opções são permitidas a serem selecionadas.
Um outro ponto positivo para o uso do choices
é que só precisamos armazenar a chave que irá identificar cada sexo, assim, economizamos um certo espaço no banco de dados, já que só será necessário armazenar um caractere (F, M ou N), não o nome do sexo (Feminino, Masculino ou Nenhuma das opções).