I'm trying to save a date value to a datefield from the django default database but it always return a None value even if the query to add this value isn't None. I tried to convert this date to string and datetime.date type and that didn't solve my problem. I'll post the html, models.py and views.py files.
HTML file:
{% extends 'account/main_template.html' %}
{% block content %}
{% include 'account/psic_area/nav_bar_h.html' %}
<h1>
Recibos
</h1>
<form action='' method='POST'>
{% csrf_token %}
<label for='select-paciente'>Selecione o paciente:</label>
<select id='select-paciente' name='nomes'>
{% for paciente in pacientes %}
<option value='{{paciente.id_usuario}}' >{{paciente.nome | capfirst}}</option>
{% endfor %}
</select>
<br><br>
<label for='quantidade'>Quantidade de Consultas</label>
<input name='quantidade' id='quantidade' type='number' required min='0' max='100'/><br>
<input type='submit' value='Criar Calendários' /><br>
<div id='input-dinamico'>
{% for inputs in inputs_dinamicos %}{{inputs | safe}}{% endfor %}
</div><br><br>
<input type='submit' value='Enviar' name='botao'>
<!-- <input type='submit' value='Enviar'/> # aqui é para usar se estivesse usando código do script-->
<br><br>
</form>
<br><br><br>
{% for data in datas_i %}
{{data}}
{% endfor %}
{{nome_do_paciente}}
/* Seleciona o input de quantidade*/
var quantidade = document.getElementById('quantidade');
/* Seleciona o div onde os inputs dinânicos serão inseridos*/
var inputsdinamicos = document.getElementById('input-dinamico');
/* cria uma função para gerar a quantidade de inputs*/
function gerarInputs(){
/*Limpa o div de inputs dinâmico*/
inputsdinamicos.innerHTML = "";
/* Obtém o valor do input de quantidade*/
var valor = parseInt(quantidade.value);
if (valor > 0 && valor ';
/*Insere o novo input no div de inputs dinâmicos*/
inputsdinamicos.appendChild(tituloinput);
inputsdinamicos.appendChild(novoinput);
}
}
}
/* Adiciona um evento de mudança ao input de quantidade*/
quantidade.addEventListener('change', gerarInputs);
-->
{% endblock %}
VIEWS.PY file
from django.shortcuts import render
from django.http import HttpResponse
from .models import PacientesCadastrado, Sessoes, Recibos
from datetime import datetime
patient_data = PacientesCadastrado()
def home(request):
return render(request, 'account/index.html')
def dashboard(request):
return render(request, 'account/dashboard.html')
def patient_list(request):
return render(request, 'account/psic_area/patient_list.html')
def lista_pacientes(request):
novo_usuario = PacientesCadastrado()
novo_usuario.id_usuario = request.POST.get('id_usuario')
novo_usuario.nome = request.POST.get('nome')
novo_usuario.idade = request.POST.get('idade')
novo_usuario.ini_trat = request.POST.get('ini_trat')
novo_usuario.valor_c = request.POST.get('valor_c')
novo_usuario.qtd_cons = request.POST.get('qtd_cons')
novo_usuario.cpf = request.POST.get('cpf')
novo_usuario.telefone = request.POST.get('telefone')
novo_usuario.e_mail = request.POST.get('e_mail')
novo_usuario.save()
#exibir todos os usuários já cadastrados em uma nova página
pacientes_cadastrados = {
'paciente': PacientesCadastrado.objects.all()
}
return render(request, 'users/pacientes.html', pacientes_cadastrados)
def blog_mente_colorida(request):
return render(request, 'account/blog/blog.html')
def area_do_psi(request):
return render(request, 'account/psic_area/main_psic_area.html')
def recibo(request):
qtd = request.POST.get('quantidade') #pegando o valor do input com name='quantidade'
datas = []
lista_test = []
nome = None
if request.method == 'POST' and int(qtd) != 0: #caso haja um input
nome = request.POST.get('nomes')
nome_paciente = PacientesCadastrado.objects.get(id_usuario=nome)
for i in range(int(qtd)):
input_html = f'Data da sessão {i + 1}: <input type="date", name="data{i+1}"/><br>'
datas.append(input_html)
button = request.POST.get('botao')
if button == 'Enviar':
for i in range(int(qtd)):
if request.POST.get(f'data{i+1}') is not None:
data_i = request.POST.get(f'data{i+1}')
# data_i = datetime.strptime(data_i, '%Y-%m-%d').date()
all_sessions = Sessoes() # trazendo o banco de dados Sessoes
all_sessions.paciente_sessao = nome_paciente
all_sessions.sessao = data_i
all_sessions.save()
lista_test.append(all_sessions.sessao)
lista_test.append(str(type(all_sessions.sessao)) + '<br><br>')
print(data_i)
lista_test.append(data_i)
lista_test.append(str(type(data_i)))
Pacientes = {'pacientes': PacientesCadastrado.objects.all(),
'inputs_dinamicos': datas,
'datas_i': lista_test,
'nome_do_paciente': nome,
}
return render(request, 'account/psic_area/recibo.html', Pacientes)
def contrato(request):
return render(request, 'account/psic_area/contrato.html')
def test(request):
recibo = request.POST.get('quantidade_teste')
inputs = []
if request.method == 'POST':
for i in range(int(recibo)):
input_html = f'Sessão {i}: <input name="input-sessao{i}" type="date"> <br>'
inputs.append(input_html)
return render(request, 'account/testando.html', {'recibos': recibo,
'pacientes': PacientesCadastrado.objects.all(),
'inputs': inputs,
})
MODELS.PY file
from django.db import models
class PacientesCadastrado(models.Model):
id_usuario = models.AutoField(primary_key=True)
nome = models.CharField(null=False, max_length=150)
idade = models.DateField(null=False)
cpf = models.PositiveIntegerField(null=False, unique=True)
ini_trat = models.DateField(null=False)
valor_c = models.PositiveIntegerField(null=False, default=0)
qtd_cons = models.PositiveIntegerField(null=False, default=0)
e_mail = models.EmailField(null=False, default='')
telefone = models.PositiveIntegerField(null=False, default=0)
def __str__(self):
return self.nome
class Recibos(models.Model):
paciente_recibo = models.ForeignKey(PacientesCadastrado, on_delete=models.CASCADE)
class Sessoes(models.Model):
paciente_sessao = models.ForeignKey(PacientesCadastrado, on_delete=models.CASCADE)
sessoes = models.DateField(null=False)
Here you can see that all_sessions.sessao has a datatime value enter image description here
and here is the None Value error from all_session.sessao enter image description here