Django开发:如何从URL传递字符串并查询数据列表?如何通过患者用户名过滤DailyVitals查询集?
解决你的Django项目问题
我来帮你逐个解决遇到的三个问题:
1. 从URL传递字符串并查询数据列表的方法
你的URL配置里已经用path('detail/<str:username>', ...)定义了捕获username参数的路由,在视图里可以通过self.kwargs['username']获取这个传递的字符串。接下来就可以用这个username关联到对应的模型,进而查询目标数据列表。
2. PatientDetailView的get_context_data查询语句修正
你当前用DailyVitals.objects.get(...)的方式有两个问题:一是get()只会返回单个对象,而你需要的是多条记录的列表;二是没有正确关联到URL传递的username对应的患者。修改后的代码如下:
from django.shortcuts import get_object_or_404 from .models import User, Patient, DailyVitals class PatientDetailView(TemplateView): template_name = 'detail_view.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 从URL路由中取出传递的username参数 username = self.kwargs['username'] # 通过username找到对应的用户,不存在则返回404页面 user = get_object_or_404(User, username=username) # 找到该用户关联的患者对象 patient = get_object_or_404(Patient, user=user) # 过滤出该患者的所有生命体征记录 vitals_list = DailyVitals.objects.filter(patient=patient) context['vitals_list'] = vitals_list return context
这里用get_object_or_404代替直接get(),能在对象不存在时返回友好的404页面,避免页面崩溃。
3. 模板跳转的错误解决
你遇到的Reverse for 'detail' with arguments '('',)' not found错误,本质是i.patient.user.username返回了空字符串。大概率是因为部分DailyVitals对象的patient字段为null(你的模型里设置了null=True, blank=True),或者关联的Patient没有绑定有效的User。
解决方法是在模板里添加判断,确保只有当关联数据存在时才渲染跳转链接:
{% if i.patient and i.patient.user %} <a href="{% url 'detail' i.patient.user.username %}">查看患者详情</a> {% else %} <span>无关联患者信息</span> {% endif %}
同时建议检查数据库数据,确保需要跳转的DailyVitals记录都正确关联了Patient和User对象。
内容的提问来源于stack exchange,提问作者Shashwat Poudel
相关产品推荐
相关产品推荐

