首页 > 解决方案 > 没有分配外键 - Django

问题描述

我是新手,任何建议都被接受,我的主要问题是我的数据库中分配了一些外键。

如您所见,最后 4 个模型通过外键与患者模型相关,这些是我的项目中未分配的字段。

楷模

class Patient(models.Model):
    Codigo = models.CharField(max_length=20,default=None,null=False)
    Nombres = models.CharField(max_length=100,null=False)
    Apellidos = models.CharField(max_length=100,null=False)
    Fecha_Nacimiento = models.DateField()
    Numero_Telefonico = models.CharField(max_length=200,default=' ')
    Email = models.CharField(max_length=256,unique=True,blank=True,default=' ')
    Genero = models.ForeignKey(Gender,on_delete=models.DO_NOTHING,default=None,null=True)
    Nacionalidad = models.ForeignKey(Nationality,on_delete=models.DO_NOTHING,default=None,null=True)
    Estado_Civil = models.ForeignKey(CivilStatus,on_delete=models.DO_NOTHING,null=True)
    Ocupacion = models.CharField(max_length=200)
    Lugar_de_Procedencia = models.CharField(max_length=200)
    Lugar_de_Residencia = models.CharField(max_length=200)

    def __str__(self):
        return self.Nombres + ' ' + self.Apellidos

class MedicalInfo(models.Model):
    Expediente = models.CharField(max_length=500,blank=True)
    Sangre = models.ForeignKey(BloodType,on_delete=models.DO_NOTHING,default=None,null=True)
    Peso = models.FloatField()
    Estatura = models.FloatField()
    Alergia = models.ForeignKey(Allergies,on_delete=models.CASCADE,default=None,null=True)
    Observacion = models.CharField(max_length=500,default= ' ',null=True)
    Paciente = models.OneToOneField(Patient,on_delete=models.CASCADE,default=None,blank=True,null=True)


class InsuranceInfo(models.Model):
    Seguro = models.ForeignKey(InsuranceCompany,on_delete=models.DO_NOTHING, default=None,blank=True,null=True)
    Tipo_de_Poliza = models.ForeignKey(Policy,on_delete=models.DO_NOTHING,default=None,blank=True,null=True)
    Numero_Poliza = models.IntegerField(default=None,blank=True,null=True)
    Vencimiento = models.DateField(default=None,blank=True,null=True)
    Paciente = models.OneToOneField(Patient,on_delete=models.CASCADE,default=None,blank=True,null=True)


class Relatives(models.Model):
    Parentesco = models.ForeignKey(Family_relation, on_delete=models.DO_NOTHING,default=None,blank=True,null=True)
    Nombre = models.CharField(max_length=100,blank=True)
    Apellido = models.CharField(max_length=100,blank=True)
    Telefono = models.CharField(max_length=100,blank=True)
    Correo = models.EmailField(blank=True)
    Nacimiento = models.DateField(blank=True,null=True)
    Pariente = models.OneToOneField(Patient,on_delete=models.CASCADE,default=None,blank=True,null=True)

    def __str__(self):
        return self.Nombre + ' ' + self.Apellido

class Background(models.Model):
    Padecimiento = models.CharField(max_length=200)
    Control = models.CharField(max_length=200)
    Medicamento = models.CharField(max_length=500)
    Paciente = models.OneToOneField(Patient,on_delete=models.CASCADE,default=None,blank=True,null=True)

这些是我的表格,您可以看到我在其中一些表格中排除了“Paciente”或“Pariente”字段(取决于模型的名称),因为我想通过我将向您展示的视图为该字段分配一个值在表格部分上方。

形式

class PatientForm(forms.ModelForm):
    class Meta:
        model = Patient
        fields = '__all__'
        widgets = {
            'Fecha_Nacimiento': DateInput()
        }

class RelativesForm(forms.ModelForm):
    class Meta:
        model = Relatives
        exclude = ('Pariente',)
        widgets = {
            'Nacimiento': DateInput()
        }

class MedicalInfoForm(forms.ModelForm):
    class Meta:
        model = MedicalInfo
        exclude = ('Paciente',)

class InsuranceInfoForm(forms.ModelForm):
    class Meta:
        model = InsuranceInfo
        exclude = ('Paciente',)

class BackgroundForm(forms.ModelForm):
    class Meta:
        model = Background
        exclude = ('Paciente',)

这是我正在谈论的视图,在这里我尝试创建一个包含所有这些表单的视图并将其显示为一个,我创建的“患者”我这个表单是我想要分配给我在表格,这就是我排除它的原因,因为我想手动分配它,这是我的尝试,我不知道我做错了什么或遗漏了什么。接受任何建议或解决方案。谢谢!

意见

def PatientFormView(request):
    if request.method == 'POST':
        patientinfo = PatientForm(data=request.POST)
        medicalinfo = MedicalInfoForm(data=request.POST)
        insuranceinfo = InsuranceInfoForm(data=request.POST)
        backgroundinfo = BackgroundForm(data=request.POST)
        first_relative = RelativesForm(data=request.POST)


        if patientinfo.is_valid() and medicalinfo.is_valid() and backgroundinfo.is_valid() and insuranceinfo.is_valid() and first_relative.is_valid():

            patient = patientinfo.save()
            patient.save()

            medicalinfo.save(commit=False)
            medicalinfo.Paciente = patient
            medicalinfo.save()

            backgroundinfo.save(commit=False)
            backgroundinfo.Paciente = patient
            backgroundinfo.save()

            insuranceinfo.save(commit=False)
            insuranceinfo.Paciente = patient
            insuranceinfo.save()

            first_relative.save(commit=False)
            first_relative.Pariente = patient
            first_relative.save()

            return HttpResponseRedirect(reverse('patients'))


    else:
        patientinfo = PatientForm()
        medicalinfo = MedicalInfoForm()
        insuranceinfo = InsuranceInfoForm()
        backgroundinfo = BackgroundForm()
        first_relative = RelativesForm()

    return render(request,'patients/patient_form.html',context={'patientinfo':patientinfo,'backgroundinfo':backgroundinfo,'first_relative':first_relative,'medicalinfo':medicalinfo,'insuranceinfo':insuranceinfo})

标签: pythondjango

解决方案


您正在尝试更新表单实例。将它们更改为:

insurance = insuranceinfo.save(commit=False)
insurance.Paciente = patient
insurance.save()

将此方法应用于其他模型。


推荐阅读