Невозможно присвоить "'75f37671bac8'": "Results.prescription" должен быть экземпляром "Prescription".
Я пытаюсь добавить пациента в свою форму результатов, но она говорит Невозможно присвоить "'75f37671bac8'": "Results.prescription" должен быть экземпляром "Prescription". Я перепробовал все, но похоже ничего не меняется, буду очень признателен за помощь. Заранее спасибо за помощь.
Models.py
class Patient(models.Model):
uniqueId = models.CharField(null=True, blank=True, max_length=100)
slug = models.SlugField(max_length=500, unique=True, blank=True, null=True)
date_created = models.DateTimeField(blank=True, null=True)
last_updated = models.DateTimeField(blank=True, null=True)
class Results(models.Model):
title = models.CharField(null=True, blank=True, max_length=100)
number = models.CharField(null=True, blank=True, max_length=100)
dueDate = models.DateField(null=True, blank=True)
status = models.CharField(choices=STATUS, default='CURRENT', max_length=100)
notes = models.TextField(null=True, blank=True)
#RELATED fields
patient = models.ForeignKey(Patient, blank=True, null=True, on_delete=models.SET_NULL)
views.py
if request.method == 'POST':
doc_form = DoctorForm(request.POST)
inv_form = ResultsForm(request.POST, instance=results)
patients_form = PatientSelectForm(request.POST, initial_patient=results.patient, instance=results)
if doc_form.is_valid():
obj = doc_form.save(commit=False)
obj.results = results
obj.save()
messages.success(request, "Results Doctor added succesfully")
return redirect('create-build-results', slug=slug)
elif inv_form.is_valid and 'paymentTerms' in request.POST:
inv_form.save()
messages.success(request, "Results updated succesfully")
return redirect('create-build-results', slug=slug)
elif patients_form.is_valid() and 'patient' in request.POST:
patients_form.save()
messages.success(request, "Client added to Results succesfully")
return redirect('create-build-results', slug=slug)
forms.py
class PatientSelectForm(forms.ModelForm):
def __init__(self,*args,**kwargs):
self.initial_patient = kwargs.pop('initial_patient')
self.PATIENT_LIST = Prescription.objects.all()
self.PATIENT_CHOICES = [('-----', '--Select a Patient--')]
for prescription in self.PATIENT_LIST:
d_t = (prescription.uniqueId, prescription.first_name)
self.PATIENT_CHOICES.append(d_t)
super(PatientSelectForm,self).__init__(*args,**kwargs)
self.fields['prescription'] = forms.ChoiceField(
label='Choose a related patient',
choices = self.PATIENT_CHOICES,
widget=forms.Select(attrs={'class': 'form-control mb-3'}),)
class Meta:
model = Results
fields = ['prescription']
traceback line
elif patients_form.is_valid() and 'patient' in request.POST:
Patient - это связанное поле с Results, когда вы создаете свою форму, вы выбираете из выпадающего списка следующее: d_t = (patient.uniqueId, patient.first_name)
Это выбор уникального идентификатора пациента, а не фактического экземпляра Patient. Вам нужен дополнительный шаг для создания экземпляра Patient из уникальногоId. Поэтому добавьте этот код в вашу форму:
def clean_patient(self):
c_patient = self.cleaned_data['patient']
if c_patient == '':
return None
else:
return Patient.objects.get(uniqueId=c_patient)
Вам нужно добавить его после мета класса, например так:
class Meta:
model = Results
fields = ['patient']
def clean_patient(self):
c_patient = self.cleaned_data['patient']
if c_patient == '':
return None
else:
return Patient.objects.get(uniqueId=c_patient)