Django Rest Framework中pytest reverse获取ViewSet Action路径失败求助
解决DRF中ModelViewSet自定义detail=False Action的reverse路径问题
你遇到的问题是对DRF Router生成的Action URL名称规则理解有误,调整名称格式即可解决:
错误原因
你之前用reverse("api:death_spec:death_spec2:case-list")采用冒号分隔的层级结构,但DRF中,Router注册的ViewSet自定义Action的URL名称格式为{basename}-{action_name}:
basename是注册Router时指定的death_spec2action_name是@action装饰器中定义的case-list
因此该Action的完整URL名称是death_spec2-case-list,结合你的app_name和上层namespace,需要把名称中的冒号替换为连字符。
正确的reverse写法
假设项目上层存在api namespace,正确写法如下:
reverse("api:death_spec:death_spec2-case-list", kwargs={'transformation_id': 70})
如果没有上层api namespace,则直接使用:
reverse("death_spec:death_spec2-case-list", kwargs={'transformation_id': 70})
验证方法
可以通过django-extensions的show_urls命令确认Action对应的URL名称:
- 安装依赖:
pip install django-extensions - 在settings.py的
INSTALLED_APPS中添加'django_extensions' - 运行命令:
python manage.py show_urls
在输出结果中找到对应Action的行,查看Name列的值,确保reverse使用的名称与之一致。
内容的提问来源于stack exchange,提问作者smartdjango
相关产品推荐
相关产品推荐

