На странице DetailView для объекта "Пациент" у меня есть форма. Когда форма заполнена и отправлена, я хочу создать объект «Местоположение». Затем я хочу создать ForeignKey, указывающий на объект «Пациент», на который мы смотрим в DetailView.
Как вы можете видеть, если форма верна, я вызываю конструктор модели, сохраняя информацию и подключите его к объекту пациента. Однако когда я проверяю Django Admin, я не вижу новый созданный объект. Я полностью импровизировал, так как не мог найти примеры в Интернете. Это способ сделать это?
class PatientDetailView(DetailView, FormMixin):
model=Patient
form_class = PastLocationForm
#template_name = 'patient_detail.html'
def get_success_url(self):
return reverse('patient_detail', kwargs={'pk': self.object.pk})
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return HttpResponseForbidden()
self.object = self.get_object()
form = self.get_form()
if form.is_valid():
pastLocationDetail = Location()
setattr(pastLocationDetail,'location',str(form.cleaned_data['location']).split(',')[0])
setattr(pastLocationDetail,'address',str(form.cleaned_data['location']).split(',')[1].split(', ')[0])
setattr(pastLocationDetail,'district',str(form.cleaned_data['location']).split('District: ')[1].split(',')[0])
setattr(pastLocationDetail,'grid_x',str(form.cleaned_data['location']).split('Coordinates: (')[1].split(', ')[0])
setattr(pastLocationDetail,'grid_y',str(form.cleaned_data['location']).split('Coordinates: (')[1].split(', ')[1][:-1])
setattr(pastLocationDetail,'date_from',form.cleaned_data['date_from'])
setattr(pastLocationDetail,'date_to',form.cleaned_data['date_to'])
setattr(pastLocationDetail,'details',form.cleaned_data['details'])
setattr(pastLocationDetail,'patient', self.object)
return self.form_valid(form)
else:
return self.form_invalid(form)
Модель местоположения
class Location(models.Model):
patient = models.ForeignKey(Patient, related_name='locations', on_delete=models.CASCADE, null=True, blank=True)
.
.
Примечание: я распечатал оба объекта
print(type(self.object))
print(pastLocationDetail)
И все выглядит хорошо. Я действительно не понимаю, почему это не записывается в базу данных