使用Django Ninja Extra编写API时出现request参数多值传入错误
问题原因与解决方案
错误原因
你遇到的TypeError: User.get_user_colls() got multiple values for argument 'request',核心原因是Django Ninja Extra控制器类的视图方法不需要显式声明request参数——控制器会自动将请求对象注入为实例属性self.request。你在方法参数里声明了request,同时装饰器(@paginate或@http_get)又自动传递了request参数,导致同一个参数被重复传入,引发冲突。
修复后的代码
@api_controller('', tags=['User'], auth=NOT_SET, permissions=[]) class User: @http_get('/user/colls', response=List[schemas.UserCollsOut], auth=JWTAuth()) @paginate(PageNumberPagination, page_size=10) def get_user_colls(self): data = userModels.UserCollection.objects.filter(user=self.request.auth) return data
关键说明
- 控制器类的视图方法,第一个参数固定为
self,无需额外声明request; - 通过
self.request即可访问请求对象,包括self.request.auth这类属性; - 移除方法参数中的
request后,装饰器传递的参数就不会和方法参数产生冲突。
内容的提问来源于stack exchange,提问作者user24269818
相关产品推荐
相关产品推荐

