Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save felipebastosweb/0c149e657b264a517ca987872dcf4e07 to your computer and use it in GitHub Desktop.
Save felipebastosweb/0c149e657b264a517ca987872dcf4e07 to your computer and use it in GitHub Desktop.
Exemplo de identificação das opções do atributo/campo na view
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