Невозможно присвоить "'75f37671bac8'": "Results.prescription" должен быть экземпляром "Prescription".

Patient

Я пытаюсь добавить пациента в свою форму результатов, но она говорит Невозможно присвоить "'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)
Вернуться на верх