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)
Back to Top