Форма Django не передается в базу данных
Я пишу Django сайт для стоматологов, стоматолог может регистрировать пациентов с помощью формы легко без проблем, однако при регистрации посещений для пациента это не сохраняется, в панели администратора обе модели работают нормально, на сайте форма посещений не сохраняется в базу данных.
models.py
from django.db import models
class Paitent(models.Model):
pname = models.CharField(max_length=50)
age = models.IntegerField()
gender = models.CharField(max_length=50)
address = models.CharField(max_length=50)
telephone = models.IntegerField()
mHistory = models.CharField(max_length=500, blank=True, null=True)
def __str__(self):
return self.pname
class Visit(models.Model):
paitent = models.ForeignKey(Paitent,null=True ,on_delete=models.CASCADE, blank=True)
toothNumber = models.CharField('involved tooth', max_length=120)
cComplaint = models.CharField('chief complaint',max_length=120)
sASymptoms = models.CharField('signs and symptoms',max_length=120)
diagnosis = models.CharField(max_length=120)
procedure = models.CharField(max_length=120)
notes = models.TextField(blank=True)
currentVisit = models.DateTimeField(
'time and date of current visit', null=True)
nextAppointment = models.DateTimeField()
def __str__(self):
return self.toothNumber
forms.py
from django import forms
from .models import Paitent
from .models import Visit
class PaitentForm(forms.ModelForm):
class Meta:
model = Paitent
fields = ['pname', 'age', 'gender', 'address', 'telephone']
class VisitForm(forms.ModelForm):
class Meta:
model = Visit
fields = ['paitent', 'toothNumber', 'cComplaint',
'sASymptoms', 'diagnosis', 'procedure',
'notes', 'currentVisit', 'nextAppointment']
views.py
from django.shortcuts import render
from .models import Paitent
from .models import Visit
from .forms import PaitentForm
from .forms import VisitForm
import calendar
from calendar import HTMLCalendar
def homePage(request):
all_paitents = Paitent.objects.all
return render (request, 'homePage.html',{'all':all_paitents})
def newpaitent(request):
if request.method == 'POST':
form = PaitentForm(request.POST or None)
if form.is_valid():
form.save()
return render(request, 'newpaitent.html', {})
else:
return render(request, 'newpaitent.html', {})
def addVisit(request):
if request.method == 'POST':
form = VisitForm(request.POST or None)
if form.is_valid():
form.save()
return render(request, 'addVisit.html', {})
else:
return render(request, 'addVisit.html', {})
спасибо заранее
Мне кажется, что вы не указали контекст в представлении:
Вместо этого:
def addVisit(request):
if request.method == 'POST':
form = VisitForm(request.POST or None)
if form.is_valid():
form.save()
return render(request, 'addVisit.html', {})
else:
return render(request, 'addVisit.html', {})
попробуйте это:
def addvisit(request):
if request.method == 'POST':
form = VisitForm(request.POST)
if form.is_valid():
try:
form.save()
return redirect("/") #Add your project route here where you want to go after adding visitors
except:
pass
else:
form = VisitForm()
return render(request, 'addvisit.html', {'form':form})
Если форма не действительна, она не будет зафиксирована в базе данных.
Выведите ошибки формы, это должно помочь вам понять, почему форма не сохраняется
if form.is_valid():
form.save()
else:
print(form.errors)