Django form is not submitted to the database
I am writing a Django website for dentists, the dentist can register patients with form easily not an issue, however when registering visits for a patient it is not saved, in the admin panel both models works just fine, on the website the visits form dose not save to database.
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', {})
thank you in advance
I think you didn't provide context in view:
Instead of this:
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', {})
try this:
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 the form is not valid, it wont be committed to database.
Print the form errors, this should help you understand why the form is not getting saved
if form.is_valid():
form.save()
else:
print(form.errors)