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

URL传入pk时PATCH方法触发500错误:TypeError异常排查

问题解决:TypeError: patch() got an unexpected keyword argument 'pk'

错误原因

你自定义的patch方法签名只声明了request参数,但URL路由里的<int:pk>会被Django作为关键字参数传递给该方法,方法未接收这个参数,导致类型错误。lookup_field = 'pk'的作用是告诉视图如何从查询集中匹配对象,不会自动处理路由参数的接收。

解决方案

修改TaskToggleDoneAPIView中的patch方法签名,添加对路由参数的接收,有两种可选方式:

方式一:直接接收pk参数

def patch(self, request, pk=None):
    instance = self.get_object()
    instance.done = not instance.done
    instance.save()
    serializer = self.get_serializer(instance)
    return Response(serializer.data)

方式二:接收任意关键字参数(更灵活,适合后续可能添加更多路由参数的场景)

def patch(self, request, **kwargs):
    instance = self.get_object()
    instance.done = not instance.done
    instance.save()
    serializer = self.get_serializer(instance)
    return Response(serializer.data)

两种方式都能解决参数不匹配的问题,因为get_object()方法会自动通过lookup_field和路由传入的pk值获取对应实例,不需要你手动处理pk参数的使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:30:44