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
相关产品推荐
相关产品推荐

