Há 1 semana perguntei aqui no fórum como eu deveria fazer uma lista de presença que gera múltiplos inputs e envia tudo pro banco de uma vez só, com checkbox marcado ou desmarcado. Embora ninguém tenha conseguido me ajudar, arrumei uma solução. Colocarei abaixo todo meu código na esperança de alguém poder me ajudar na edição. Gostaria que alguém me ajudasse a renderizar o formulário de edição com os checkbox marcados ou desmarcados, a depender do valor do banco, a única complicação é que tem o input hidden que traz o valor='F' e o input checkbox que traz o value='P'... Aceito sugestões, obrigado desde já.
HTML:
<form action="{% url 'cadastra_presenca' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{% for alunos in curso %}
<tr class="tbody-row">
<td class="tbody-column" style="display:none;">
<label style="display: flex; justify-content: center;display: none;">
<input type="text" class="input-3" value="{{alunos.id}}" name="id_matricula_presenca"/>
</label>
</td>
<td class="tbody-column">{{alunos.alunos.nome_aluno}}
<label style="display: flex; justify-content: center;display: none;">
<input type="text" class="input-3" value="{{alunos.alunos.nome_aluno}}" name="nome_aluno_presenca"/>
</label>
</td>
<td class="tbody-column">
<input type="date" class="input-3" value="{{data_presenca}}" readonly name="data_presenca_aluno">
</td>
<td class="tbody-column">
<label style="display: flex; justify-content: center;">
<input type="checkbox" class="presenca" checked multiple value="P" name="confirma_presenca_aluno">
<input class="ausencia" type='hidden' disabled value='F' multiple name='confirma_presenca_aluno'>
</label>
</td>
</tr>
{% endfor %}
<div style="display: flex; justify-content: center;position:relative;">
<input type="submit" class="botao-presenca" value="OK">
</div>
</form>
JAVA SCRIPT (responsável por dar valor F quando checkbox estiver desmarcado, de outra forma ele não envia nenhum valor pro backend):
presenca.forEach(function(p){
p.addEventListener('click',function(){
var ausente=p.parentNode.querySelector('.ausencia');
if(ausente.disabled==true){
ausente.disabled=false;
}else if(ausente.disabled==false){
ausente.disabled=true;
}
});
});
Django (Captura dados e joga no banco):
def cadastra_presenca(request):
if request.method=='POST':
id_matricula_presenca=request.POST.getlist('id_matricula_presenca')
lista_matricula=request.POST.getlist('nome_aluno_presenca')
lista_presenca=request.POST.getlist('confirma_presenca_aluno')
lista_data=request.POST.getlist('data_presenca_aluno')
lista_final=[]
contador=0
for i in lista_data:
if contador<= len(lista_data):
lista_final.append([id_matricula_presenca[contador],lista_matricula[contador],lista_presenca[contador],lista_data[contador]])
contador+=1
con=0
for j in lista_final:
matricula=Matricula.objects.get(pk=j[0])
id_aluno=matricula.alunos.id
attendance=ListaPresenca.objects.filter(identificador_usuario=request.user.id).filter(matricula=matricula)
if attendance.filter(dia_presenca=j[3]).exists():
messages.error(request,'Presença já cadastrada para esse(s) aluno(s)')
return redirect('filtro_presenca')
dar_presenca=ListaPresenca.objects.create(identificador_usuario=request.user.id,matricula=matricula,
dia_presenca=j[3],presenca=j[2])
dar_presenca.save()
#print(lista_presenca)
messages.success(request,'Presença cadastrada com sucesso')
return redirect('filtro_presenca')