You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改Django Rest Framework(DRF)路由URL前缀以传递双查询字段

Django DRF 博客评论路由配置解决方案

你的现有写法存在错误:DRF 内置的 SimpleRouter 不支持直接在 register 方法的前缀参数中写入 <int:id> 这类路径参数,因此无法正确解析传递博客ID。你可以选择以下两种方案调整:


方案1:手动补充评论路由(无额外依赖)

直接修改urls.py内容如下:

from django.urls import path, include
from rest_framework.routers import SimpleRouter

from .views import BlogViewSet, CommentViewSet

router = SimpleRouter()
router.register('blog', BlogViewSet, basename='blog')
router.register('comments', CommentViewSet, basename='comments')

urlpatterns = [
    # 自定义带博客ID的评论路由
    path('blog/<int:blog_id>/comments/', CommentViewSet.as_view({'get': 'list', 'post': 'create'}), name='blog-comments-list'),
    path('blog/<int:blog_id>/comments/<int:pk>/', CommentViewSet.as_view({'get': 'retrieve', 'put': 'update', 'patch': 'partial_update', 'delete': 'destroy'}), name='blog-comments-detail'),
    path('', include(router.urls)),
]

后续在CommentViewSet中可通过self.kwargs['blog_id']获取当前请求对应的博客ID,过滤关联的评论数据即可。


方案2:嵌套路由实现(符合RESTful规范)

先执行pip install drf-nested-routers安装嵌套路由扩展,再修改urls.py内容如下:

from django.urls import path, include
from rest_framework_nested import routers
from .views import BlogViewSet, CommentViewSet

# 一级路由:博客资源
router = routers.SimpleRouter()
router.register('blog', BlogViewSet, basename='blog')

# 二级嵌套路由:对应博客下的评论资源
blog_router = routers.NestedSimpleRouter(router, 'blog', lookup='blog')
blog_router.register('comments', CommentViewSet, basename='blog-comments')

urlpatterns = [
    path('', include(router.urls)),
    path('', include(blog_router.urls)),
]

该方案会自动生成标准的RESTful路径,可在CommentViewSet中通过self.kwargs['blog_pk']获取博客ID。


内容的提问来源于stack exchange,提问作者Põyã Shadman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:24:01