Django Admin自定义模板中手动添加关联模型指定对象跳转链接的问题(无需JS)
Hey,我来帮你解决这个问题!你遇到的NoReverseMatch大概率是URL名称写错了,或者参数传递的小问题,完全不用JS,也不一定需要extra_context,咱们一步一步来:
先搞对Admin URL的命名规则
Django Admin的单个对象修改页URL命名是固定格式:admin:<app_label>_<模型类名小写单数>_change。比如你的Model模型在appname这个应用下,正确的URL名称应该是admin:appname_model_change——注意是单数的model,不是你写的carmodels(除非你的模型类名是CarModels,但看你描述应该是Model)。要是拿不准,你可以用
python manage.py show_urls(需要先装django-extensions:pip install django-extensions)查看所有已注册的URL,找到对应Model修改页的那条,就能看到准确的名称。在模板里正确传递PK参数
如果是在Car的Admin修改页模板(比如自定义的change_form.html)里,Django已经把当前的Car对象放到了original变量里,你直接用关联Model的PK就行:<a href="{% url 'admin:appname_model_change' original.model.pk %}">跳转到关联的Model详情页</a>要是你想硬编码测试(比如pk=42),只要URL名称正确,这么写也没问题:
<a href="{% url 'admin:appname_model_change' 42 %}">测试跳转到PK=42的Model</a>要不要用extra_context?
完全不需要!Admin模板本身就自带当前对象的上下文(original变量),直接用它关联的Model对象PK就可以,没必要额外传上下文。
最后再排查几个可能的小坑:
- 确认你的app名称没错(比如是不是叫
appname,还是实际是auto、cars这类); - 模型类名的小写单数别写错(比如模型是
VehicleModel,那就是vehiclemodel); - 确保你要跳转的Model已经在Admin里注册了,不然对应的URL根本不存在。
这样调整后,应该就能正常跳转啦!
备注:内容来源于stack exchange,提问作者xtlc

