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

Django REST Framework的has_permission无法获取URL参数pk/id问题

解决方法

request.POST 仅能获取POST请求体中的表单参数,而URL路径中的<int:pk>属于路由解析参数,不会存在于请求体中,因此无法通过该方法获取。

在Django REST Framework的权限类has_permission方法中,所有路由解析出来的路径参数都会保存在视图实例的kwargs属性中,直接从该属性取值即可:

def has_permission(self, request, view):
    # 提取URL路径中的pk参数
    pk = view.kwargs.get('pk')
    # 后续编写你的权限校验逻辑即可
    pass

补充说明

  • 如果你路由中定义的路径参数名不是pk,比如是resource_id,把view.kwargs.get的key替换为对应参数名即可
  • 如果当前请求对应无路径参数的列表接口,view.kwargs.get('pk')会返回None,建议提前做空值判断避免后续逻辑报错
  • 如果你是在has_object_permission方法中做对象级权限校验,也可以直接通过方法传入的第三个参数obj直接获取对应实例,无需手动取pk查询

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:36:07