Py学习  »  Django

在Django中显示ForiegnKey中的对象时出现问题

Vicky Rathod • 4 年前 • 284 次点击  

我有两个模型病人和Ipd,病人可以有多个Ipd。我试图在IpdForm中获取患者信息,但不知道哪里出错了

我已经尝试过“qs=Ipd.objects.get(patient\u id=patient\u id)”,“qs=Ipd.objects.filter(patient\u id=patient\u id)”,但没有成功

型号.py:

class Patient(models.Model): 

    name = models.CharField(max_length=200);
    phone = models.CharField(max_length=20);
    address = models.TextField();
    Patient_id = models.AutoField(primary_key=True);
    Gender= models.CharField(choices=GENDER, max_length=10)
    consultant = models.CharField(choices=CONSULTANT, max_length=20)

    def __str__(self):
        return self.name 

class Ipd(models.Model):

    reason_admission = models.CharField(max_length=200, blank=False)
    presenting_complaints = models.CharField(max_length=200,)
    ipd_id = models.AutoField(primary_key=True)
    rooms = models.ForeignKey(Rooms,on_delete=models.CASCADE, blank=False)
    date_of_admission = models.DateField(("Date"),
        default=datetime.date.today)  
    patient = models.ForeignKey(Patient, on_delete=models.CASCADE, blank=False, default = "")

    def __str__(self):
        return self.patient.name

forms.py格式:

class PatientForm(forms.ModelForm):


    class Meta:
        model = Patient
        fields = ['name','phone','address','Patient_id','consultant','Gender']

class IpdForm(ModelForm):

    class Meta:
        model = Ipd

        fields = ['patient', 'reason_admission', 'presenting_complaints', 
                  'rooms', 'date_of_admission']

视图.py:

@login_required
def ipd (request,patient_id):
    formtwo = IpdForm()
    qs = Ipd.objects.filter(patient__Patient_id=patient_id)
    if request.method=="POST":

        formtwo = IpdForm(request.POST)

        if  formtwo.is_valid() :
            instance = formtwo.save(commit=False)
            instance.save
        else:
            return HttpResponse(formtwo.errors) 
    else:
        formtwo = IpdForm()
        return render(request, 'newipd.html', {'a':qs,'form2':formtwo})

网址.py:

url(r'^order/ipd/(?P<patient_id>\d+)/$', my_order.ipd, name='ipd'),

html格式:

<div class="card-panel">                                                 
<span class="blue-text text-darken-2">Name : {{ab.name}}</span> <br>                                                 
<span class="blue-text text-darken-2">Phone : {{ a.phone  }}</span><br>                                                  
<span class="blue-text text-darken-2">Address : {{ a.address  }}</span><br>                                              
<span class="blue-text text-darken-2">Gender : {{ a.Gender  }}</span><br>                                            
</div>
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50954
 
284 次点击  
文章 [ 1 ]  |  最新文章 4 年前
normic
Reply   •   1 楼
normic    4 年前

您只需使用

Ipd.objects.filter(patient_id=patient_id)

请注意第一个患者id处的下划线。

访问相关模型时只使用双下划线,但在本例中,Ipd模型中直接有外键。

编辑 我刚看到,你创建了自己的病人Id字段。 我建议在没有现场病人id的情况下重新创建你的病人模型。 Django将自己创建一个ID字段。

如果您真的想保留自己的字段,那么正确的访问方法是:

Ipd.objects.filter(patient_patient_id=patient_id)

但我不建议这么做。

代码中还有很多缺陷,比如模型中的所有字段都是小写的,等等。 请尝试引用Django文档,或者Python文档。

保持代码清晰会简化很多事情。