django中显示外键对象时出现问题

django中显示外键对象时出现问题,django,django-models,django-views,Django,Django Models,Django Views,我有两个模型病人和Ipd,病人可以有多个Ipd。我试图在IpdForm中获取患者信息,但不知道哪里出错了 我已经尝试过“qs=Ipd.objects.get(patient\uu id=patient\u id)”,“qs=Ipd.objects.filter(patient\uu id=patient\u id)”,但没有任何效果 models.py: class患者(models.Model): name=models.CharField(最大长度=200); phone=models.Ch

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

我已经尝试过“qs=Ipd.objects.get(patient\uu id=patient\u id)”,“qs=Ipd.objects.filter(patient\uu id=patient\u id)”,但没有任何效果

models.py:

class患者(models.Model):
name=models.CharField(最大长度=200);
phone=models.CharField(最大长度=20);
地址=models.TextField();
患者id=models.AutoField(主键=True);
性别=型号.CharField(选项=性别,最大长度=10)
consultant=models.CharField(选项=consultant,最大长度=20)
定义(自我):
返回self.name
Ipd类(型号.型号):
reason\u Acmission=models.CharField(最大长度=200,空白=False)
提出投诉=models.CharField(最大投诉长度=200,)
ipd_id=models.AutoField(主键=True)
房间=模型.ForeignKey(房间,on_delete=models.CASCADE,blank=False)
入院日期=models.DateField((“日期”),
默认值=datetime.date.today)
patient=models.ForeignKey(patient,on_delete=models.CASCADE,blank=False,default=”“)
定义(自我):
返回self.patient.name
forms.py:

class PatientForm(forms.ModelForm):
类元:
模型=患者
字段=[“姓名”、“电话”、“地址”、“患者id”、“顾问”、“性别”]
IpdForm类(模型形式):
类元:
型号=Ipd
字段=[“患者”、“入院原因”、“提出投诉”,
“房间”、“入住日期”]
views.py:

@需要登录\u
def显示(请求、患者id):
patient=patient.objects.filter(pk=patient\u id)
返回呈现(请求'show.html',{'patient':patient})
@需要登录
def新(请求):
如有要求,请发送:
表单=PatientForm(request.POST)
如果form.is_有效():
如果form.save():
返回重定向('/',messages.success(请求'Patient is successfully','alert success'))
其他:
返回重定向(“/”,messages.error(请求“数据未保存”,“警报危险”))
其他:
返回重定向(“/”,messages.error(请求“表单无效”,“警告危险”))
其他:
form=PatientForm()
返回呈现(请求'new.html',{'form':form})
@需要登录
def编辑(请求,患者id):
如有要求,请发送:
patient=patient.objects.get(pk=patient\u id)
form=PatientForm(request.POST,instance=patient)
如果form.is_有效():
如果form.save():
返回重定向(“/”,messages.success(请求“患者已成功更新”,“警报成功”))
其他:
返回重定向(“/”,messages.error(请求“数据未保存”,“警报危险”))
其他:
返回重定向(“/”,messages.error(请求“表单无效”,“警告危险”))
其他:
表单=患者表单(实例=患者)
返回呈现(请求'edit.html',{'form':form})
@需要登录
def ipd(请求,患者id):
对象=获取对象或404(Ipd,患者id=患者id)
如果request.method==“POST”:
formtwo=IpdForm(request.POST)
如果formtwo.u有效():
instance=formtwo.save(commit=False)
save()实例
其他:
返回HttpResponse(formtwo.errors)
其他:
formtwo=IpdForm()
返回呈现(请求'newipd.html',{'object':对象,'form2':formtwo})
URL.py:

url(r'^order/ipd/(?P<patient_id>\d+)/$', my_order.ipd, name='ipd'),
url(r'^order/ipd/(?P\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>

名称:{ab.Name}}
电话:{{a.Phone}}
地址:{a.Address}}
性别:{a.性别}}

您发布的代码中有很多问题

  • 您不应该将默认值添加到ForeignKey字段,尤其是字符串
  • views.py
    中执行
    form.save
    时,您没有调用
    save()
    方法,该方法是一个函数,因此,表单/模型中不会保存任何内容
  • 您的queryset无法访问所需的字段,它应该抛出一个错误
  • 请不要调用变量/查询集,如
    a
    b
  • 话虽如此,您的
    views.py
    应该如下所示:

    已编辑: 刚刚意识到这里的主要问题是您只在
    GET
    方法上重新调整queryset,而不是在
    POST
    上。我不知道这是不是故意的。我正在编辑我的答案,考虑到这不是故意的。另外,由于我们正在更改
    models.py
    ,请确保再次运行迁移

    视图.py

    从django.shortcuts导入get\u object\u或\u 404
    @需要登录
    def ipd(请求,患者id):
    对象=获取对象或404(Ipd,患者id=患者id)
    如果request.method==“POST”:
    formtwo=IpdForm(request.POST)
    如果formtwo.u有效():
    instance=formtwo.save(commit=False)
    save()实例
    其他:
    返回HttpResponse(formtwo.errors)
    其他:
    formtwo=IpdForm()
    返回呈现(请求'newipd.html',{'object':对象,'form2':formtwo})
    
    html

    
    名称:{{object.patient.Name}}
    电话:{{object.patient.Phone}}
    地址:{{object.patient.Address}}
    性别:{{ob