Django: Как получить и сохранить поле внешнего ключа в методе POST
Я пытаюсь сохранить данные в двух моделях Booking и Event. Первая работает хорошо, но я получаю ошибку в модели Event, я не знаю, как получить и сохранить данные внешнего ключа. Вот моя модель Event:
class Event(models.Model):
def __str__(self):
return self.title
title = models.CharField(max_length=200)
description = models.TextField(blank=True)
start_time = models.DateTimeField()
end_time = models.DateTimeField(blank=True, null=True)
place = models.CharField(max_length=200,blank=True)
patient = models.ForeignKey(Patient, on_delete=models.CASCADE, blank=True,null=True)
doctor = models.ForeignKey(User, on_delete=models.CASCADE, blank=True,null=True)
Вот мои взгляды:
def registerBooking(request):
if request.method == 'POST':
form = BookingForm(request.POST)
place = request.POST.get('place','')
visit_type = request.POST.get('visit_type','')
description = request.POST.get('description','')
patient = request.POST.get('patient','')
doctor = request.POST.get('doctor','')
created_at = request.POST.get('created_at','')
if form.is_valid():
new_booking = form.save()
new_event = Event(title=visit_type,description=description,start_time=created_at,place=place,patient=patient,doctor=doctor)
new_event.save()
return JsonResponse({"msg":"Booking and Event successfully saved."})
#return redirect(reverse('dashboard'))
else:
return JsonResponse({"msg":"Invalid data"})
else:
form = BookingForm()
return render(request, 'patient/register_booking.html', {'form':form})
new_booking работает, но проблема в new_event, я получаю эту ошибку: "ValueError: Cannot assign "'1'": "Event.patient" должен быть экземпляром "Patient"."
Вы можете получить экземпляр Patient
с помощью patient = Patient.objects.filter(pk = request.POST.get('patient','')).first()
и затем использовать его при создании Event
Если нет Patient
с pk
, который вы получили в request.POST
, вы получите None
в patient
, и после создания Event
, patient
поле в нем будет None
также
То же самое для Doctor
экземпляра