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

Django DRF中REST端点无法获取pk参数的问题咨询

问题原因与解决方案

核心问题

你给@action装饰器设置了detail=False,这会让Django REST Framework把这个接口注册为列表级端点(对应整个资源集合,而非单个实例),生成的URL路径是mymodule/my_rest_api/,不包含<pk>占位符。这直接导致两个现象:

  • 带/1019的URL无法匹配路由规则,返回404
  • 去掉/1019后能进入方法,但因为是列表级接口,DRF不会传递pk参数,所以方法里的pk始终是None

修复步骤

如果你的my_rest_api接口需要针对单个实例(用到pk=1019),只需把@action的detail参数改成True:

class MyModuleViewSet(viewsets.ModelViewSet):
    
    # ... 

    # 将detail=False修改为detail=True
    @action(detail=True, permission_classes=(IsOwnerOrReadOnly,))
    @debugger_queries
    def my_rest_api(self, request, pk=None):
        
        # ...

        return HttpResponse(resp, content_type="application/json", status=status.HTTP_200_OK)

修改后,DRF会自动生成包含<pk>的URL路径:mymodule/<pk>/my_rest_api/,此时你原来的URLhttp://0.0.0.0:3000/myproject/api/mymodule/1019/my_rest_api/?format=json&param1=7945就能正常匹配,pk参数也会被正确赋值为1019。

补充说明

  • detail=False:对应列表接口,URL不包含pk,视图方法无法获取单个实例的主键
  • detail=True:对应详情接口,URL包含pk,DRF会自动从URL中提取主键并传递给视图方法

内容的提问来源于stack exchange,提问作者MsA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:05:51