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

Django Rest Framework:URL路径参数致get方法报错求助

问题原因与解决办法

核心问题

Django会把URL路径里捕获的参数(比如<int:product>)作为关键字参数传递给视图的请求处理方法(比如get),但你的get方法只定义了request这一个参数,没有接收额外的product参数,导致在调用方法前就触发了TypeError,自然不会执行到断点处。

解决方法

方法1:修改APIView的get方法,添加对应参数

根据URL中定义的参数名,在get方法里增加对应的参数:

class ProductRating(APIView):
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ProductRatingSerializer

    def get(self, request, product):  # 新增product参数,和URL里的<int:product>对应
        breakpoint()
        # 后续可以用product变量获取目标产品ID,比如做查询:
        # product_obj = Product.objects.get(id=product)

如果URL里改成了<int:pk>或<int:id>,就把方法参数改成pk或id即可。

方法2:使用RetrieveAPIView时指定参数映射

如果用RetrieveAPIView,需要设置lookup_url_kwarg属性,匹配URL中的参数名:

class ProductRating(RetrieveAPIView):
    permission_classes = [permissions.IsAuthenticated]
    serializer_class = ProductRatingSerializer
    queryset = Product.objects.all()
    lookup_url_kwarg = 'product'  # 指定URL里捕获的参数名是product

如果URL参数是<int:pk>,则可以不用设置lookup_url_kwarg,因为RetrieveAPIView默认使用pk作为参数名。

为什么断点没触发?

因为参数不匹配的错误是在Django尝试调用你的get方法之前就抛出的,属于参数传递阶段的错误,代码根本没机会执行到breakpoint()这一行,所以断点不会触发。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:10:26