Невозможно добавить значение в таблицу Django DataBase
Извините, я начинающий django, пытаюсь сделать приложение для записи на прием к врачу и не смог решить эту проблему
Я не могу добавить значение в Appoiment Db в приложение django вот мой models.py
from django.db import models
models.py_
class Doctors(models.Model):
doctor_name = models.CharField(max_length=80)
specialization_doctor = models.CharField(max_length=80)
def __str__(self):
return self.doctor_name
class Appoiment(models.Model):
doctor_name = models.ManyToManyField(Doctors)
date_appoiment = models.DateField()
time_appoiment = models.TimeField()
patient_name = models.CharField(max_length=80)
patient_phone = models.CharField(max_length=15)
reason_for_visit = models.TextField(max_length=400)
def __str__(self):
return self.patient_name
А это мой views.py Я пробую много способов, но не могу решить эту проблему.
VIEWS.PY
from django.shortcuts import render
from .models import Doctors,Appoiment
from .forms import AppoimentForm
from django.http import HttpResponseRedirect
def main(request):
list_of_doctors = Doctors.objects.all().values('doctor_name')
list_of_doctors = [item['doctor_name']for item in list_of_doctors]
doctor_name=''
date_appoiment=''
time_appoiment=''
name=''
phone=''
reason=''
form = ''
patient=''
if request.method == 'POST':
doctor_name = request.POST.get('doctor_name')
date_appoiment = request.POST.get('date')
time_appoiment = request.POST.get('time')
name = request.POST.get('name')
phone = request.POST.get('phone')
reason = request.POST.get('reason')
# doctor = Doctors()
# The problem is here how to write right statement
#------->>
patient = Appoiment.objects.create(doctor_name=doctor_name,date_appoiment=date_appoiment,time_appoiment=time_appoiment,patient_name=name,patient_phone=phone,reason_for_visit=reason)
return render(request,'main.html',{'list_of_doctors':list_of_doctors,'patient':patient})```
В вашей форме вы получаете doctor_name
в виде строки, но поскольку это ManyToManyField
, вам нужно передать его в виде списка объектов Doctors.
Попробуйте такой вид:
from django.shortcuts import render
from .models import Doctors, Appoiment
from .forms import AppoimentForm
from django.http import HttpResponseRedirect
def main(request):
list_of_doctors = Doctors.objects.all()
if request.method == 'POST':
doctor_names = request.POST.getlist('doctor_name')
date_appoiment = request.POST.get('date')
time_appoiment = request.POST.get('time')
name = request.POST.get('name')
phone = request.POST.get('phone')
reason = request.POST.get('reason')
doctors = [Doctors.objects.get(doctor_name=doc_name) for doc_name in doctor_names]
appointment = Appoiment.objects.create(
date_appoiment=date_appoiment,
time_appoiment=time_appoiment,
patient_name=name,
patient_phone=phone,
reason_for_visit=reason
)
appointment.doctor_name.add(*doctors)
return HttpResponseRedirect('/')
return render(request, 'main.html', {'list_of_doctors': list_of_doctors})
Здесь:
Сначала мы используем request.POST.getlist('doctor_name')
, чтобы получить список имен врачей.
Затем мы извлекаем соответствующие объекты Doctors из базы данных с помощью Doctors.objects.get(doctor_name=doc_name)
.
Затем мы создаем объект Appoiment
с помощью Appoiment.objects.create()
и передаем в него данные формы.
Наконец, мы добавляем выбранных врачей в объект записи на прием с помощью appointment.doctor_name.add(*doctors)
.
Вы можете написать эту строку следующим образом,
patient = Appoiment(doctor_name=doctor_name,date_appoiment=date_appoimet,time_appoiment=time_appoiment,patient_name=name,patient_phone=phone,reason_for_visit=reason)
patient.save()