首页 > 解决方案 > Django中不存在ipd匹配查询

问题描述

我正在尝试使用 QS 从 ForeignKey 获取对象,但我似乎找不到问题

视图.py:

@login_required
    def ipd (request,patient_id):
        formtwo = IpdForm()
        qs = Ipd.objects.get(patient=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})

html:

    <div class="card-panel">                                                         
    <span class="blue-text text-darken-2">Name : {{a.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>

网址.py

from django.conf.urls import url
from django.contrib import admin
from orders import views as my_order
from django.contrib.auth import views as auth
from django.contrib.auth.decorators import login_required


urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', my_order.index, name='home'),
    url(r'^orders$', my_order.index, name='home'),
    url(r'^order/(?P<patient_id>\d+)/$', my_order.show, name='show'),
    url(r'^order/new/$', my_order.new, name='new'),
    url(r'^order/ipd/(?P<patient_id>\d+)/$', my_order.ipd, name='ipd'),
    url(r'^order/edit/(?P<patient_id>\d+)/$', my_order.edit, name='edit'),
    url(r'^order/delete/(?P<patient_id>\d+)/$', my_order.destroy, 
name='delete'),
    url(r'^ipdlist$', my_order.ipd_list, name='ipd_list'),
    url(r'^users/login/$', auth.LoginView.as_view, {'template_name': 
'login.html'}, name='login'),
    url(r'^users/logout/$', auth.LogoutView.as_view, {'next_page': '/'}, 
name='logout'),
    url(r'^users/change_password/$', login_required(auth.PasswordResetForm), 
{'post_change_redirect' : '/','template_name': 'change_password.html'}, 
name='change_password'),
]

我找不到我的代码有什么错误,我是 Django 新手,需要帮助才能找到我的答案!

标签: djangodjango-modelsdjango-views

解决方案


要查询foreign key患者字段,您需要使用patient__Patient_id=patient_id而不是patient=patient_id.

而且你应该使用filter()而不是因为get()一对多的关系,因此 1 名患者可以有超过 1 个 Ipd。

qs = Ipd.objects.filter(patient__Patient_id=patient_id)

推荐阅读