Last active
July 24, 2025 21:31
-
-
Save felipebastosweb/0c149e657b264a517ca987872dcf4e07 to your computer and use it in GitHub Desktop.
Exemplo de identificação das opções do atributo/campo na view
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class Funcionario(models.Model): | |
SEXO_CHOICES = [ | |
("NAOINFORMADO", "Não Informado"), | |
("FEM", "Feminino"), | |
("MAS", "Masculino") | |
] | |
genero = models.CharField(max_length=50, choices=SEXO_CHOICES, default = ("NAOINFORMADO", "Não Informado")) | |
CONTRATACAO_CHOICES = [ | |
("ESTATUTARIO", "Servidor Estatutário"), | |
("CLT", "Servidor CLT"), | |
("REDA", "Servidor REDA"), | |
("TERCEIRIZADO", "Terceirizado"), | |
] | |
contratacao = models.CharField(max_length=50, choices=CONTRATACAO_CHOICES) | |
cargo = models.ForeignKey(Cargo, on_delete=models.CASCADE) | |
FORMACOES_CHOICES = [ | |
("FUNDAMENTAL", "Ensino Fundamental"), | |
("MEDIO", "Ensino Médio"), | |
("TECNICO", "Ensino Técnico"), | |
("SUPER_INCOMPLETO", "Superior Incompleto"), | |
("SUPERIOR", "Superior Completo"), | |
("POSGRADUACAO", "Pós-Graduação"), | |
("MESTRADO", "Mestrado"), | |
("DOUTORADO", "Doutorado"), | |
("PHD", "Pós-Doutorado"), | |
] | |
formacao = models.CharField(max_length=50, choices=FORMACOES_CHOICES) | |
# view passando os valores do enum para o template | |
# lista todas os funcionarios registrados no banco de dados | |
def funcionarios_index(request): | |
# lista todos os funcionários | |
funcionarios = Funcionario.objects.all() | |
# lista os cargos | |
cargos = Cargo.objects.order_by("nome").all() | |
# renderiza o template | |
return render( | |
request, | |
"ficha_cadastral/funcionarios_index.html", | |
{ | |
"contratacoes": Funcionario.CONTRATACAO_CHOICES, # enums de modalidade | |
"formacoes": Funcionario.FORMACOES_CHOICES, # enums de escolaridade | |
"generos" : Funcionario.SEXO_CHOICES, # enums de sexo | |
"cargos": cargos, | |
"funcionarios": funcionarios, | |
} | |
) | |
# exibição dos enums no formulário | |
""" | |
<div class="mb-3"> | |
<label class="form-label">Sexo</label> | |
<select id="genero" name="genero" class="form-select"> | |
{% for value, genero in generos %} | |
<option value="{{ value }}">{{ genero }}</option> | |
{% endfor %} | |
</select> | |
</div> | |
<div class="mb-3"> | |
<label class="form-label">Modalidade de Contrato</label> | |
<select id="contratacoes" name="contratacoes" class="form-select"> | |
<option value="" disabled>Selecione uma Modalidade</option> | |
{% for value, contratacao in contratacoes %} | |
<option value="{{ value }}">{{ contratacao }}</option> | |
{% endfor %} | |
</select> | |
</div> | |
<div class="mb-3"> | |
<label class="form-label">Formação</label> | |
<select id="formacoes" name="formacoes" class="form-select"> | |
<option value="" disabled>Selecione uma Formação</option> | |
{% for value, formacao in formacoes %} | |
<option value="{{ value }}">{{ formacao }}</option> | |
{% endfor %} | |
</select> | |
</div> | |
""" | |
# exemplo de uso na view | |
# indice = next(i for i, opcao in enumerate(SEXO_CHOICES) if opcao[0] == "MAS") | |
# cadastra cargo no banco de dados | |
def funcionarios_cadastrar(request): | |
existe = Funcionario.objects.filter(nome = request.POST["nome"].strip()).first() | |
if not existe: | |
cargo = get_object_or_404(Cargo, pk=request.POST["cargos"]) | |
Funcionario.objects.create( | |
# ... | |
genero = next(i for i, opcao in enumerate(Funcionario.SEXO_CHOICES) if opcao[0] == request.POST["genero"]), | |
contratacao = next(i for i, opcao in enumerate(Funcionario.CONTRATACAO_CHOICES) if opcao[0] == request.POST["contratacoes"]), | |
formacao = next(i for i, opcao in enumerate(Funcionario.FORMACOES_CHOICES) if opcao[0] == request.POST["formacoes"]), | |
# ... | |
) | |
return redirect("/ficha-cadastral/funcionarios/") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment