Django模板中如何将外键关联的驾驶员license_number作为URL参数传入超链接href属性
Django模板中如何将外键关联的驾驶员license_number作为URL参数传入超链接href属性
嘿,我来帮你搞定这个问题!不用改Driver模型的__str__方法完全能解决,咱们一步步来:
先确认URL配置是否正确
你的driver-detail路由必须要接收一个和模板传参对应的参数名,比如如果模板里传license_number,那urls.py里得这么写:path('driver-detail/<str:license_number>/', views.driver_detail_view, name='driver-detail')参数名一定要匹配,不然URL生成会失败或者为空。
排查模板空值的原因
你原来的写法href="{% url 'driver-detail' vehicle.driver.license_number %}"出现空值,大概率是这两种情况:- Vehicle的driver字段为null:如果你的Vehicle外键设置了
null=True,有些车辆可能没关联驾驶员,这时候vehicle.driver是None,自然拿不到license_number。加个判断就能解决:{% if vehicle.driver %} <a href="{% url 'driver-detail' vehicle.driver.license_number %}">{{ vehicle.driver }}</a> {% else %} <span>无关联驾驶员</span> {% endif %} - 没预加载关联的Driver数据:如果视图里查Vehicle时没加
select_related('driver'),可能会出现懒加载导致的属性访问问题。修改查询集预加载数据:vehicles = Vehicle.objects.select_related('driver').all()
- Vehicle的driver字段为null:如果你的Vehicle外键设置了
更稳妥的替代方案:用Driver的主键传参
因为你把license_number设成了Driver的主键,所以vehicle.driver.pk就是license_number。换这种写法更简洁,还不用改__str__:- 修改
urls.py的路由参数为pk:path('driver-detail/<str:pk>/', views.driver_detail_view, name='driver-detail') - 模板里的链接改成:
<a href="{% url 'driver-detail' vehicle.driver.pk %}">{{ vehicle.driver }}</a> - 视图里用
pk查询Driver:def driver_detail_view(request, pk): driver = get_object_or_404(Driver, pk=pk) # 后续业务逻辑...
- 修改
按上面的步骤处理后,应该就能正常生成带驾驶员驾照号的跳转链接啦!
备注:内容来源于stack exchange,提问作者mebratu
相关产品推荐
相关产品推荐

