Невозможно добавить значение в таблицу 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()
Вернуться на верх