首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django中显示来自ForeignKey的对象的问题

在Django中显示来自ForeignKey的对象的问题
EN

Stack Overflow用户
提问于 2019-07-22 12:28:31
回答 1查看 57关注 0票数 0

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

我已经试过了"qs = Ipd.objects.get(patient__id=patient_id)“,"qs = Ipd.objects.filter(patient__id=patient_id)”,但是没有什么效果。

models.py:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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']

views.py:

代码语言:javascript
复制
@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})

urls.py:

代码语言:javascript
复制
url(r'^order/ipd/(?P<patient_id>\d+)/$', my_order.ipd, name='ipd'),

html:

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-22 12:47:03

您可以简单地访问您的病人模型

代码语言:javascript
复制
Ipd.objects.filter(patient_id=patient_id)

注意第一个patient_id中的单个下划线。

在访问相关模型时,您只使用双下划线,但在这种情况下,Ipd模型中直接有一个外键。

我刚才看到的编辑,您创建了自己的Patient_Id字段。我建议在没有字段Patient_id的情况下重新创建您的病人模型。Django将自己创建一个ID字段。

如果您确实希望保留您自己的字段,那么正确的访问权限应该是:

代码语言:javascript
复制
Ipd.objects.filter(patient_patient_id=patient_id)

但我不建议你这么做。

您的代码中还有很多缺陷,比如将所有字段都保持在模型中,等等。请尝试参考Django文档,或者Python文档。

保持代码清晰将简化许多事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57146068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档