我正在尝试实现对象级权限。当我运行我的代码时,我收到一条错误消息,指出我使用了太多位置参数。
TypeError: has_object_permission() takes 3 positional arguments but 4 were given
但是,当我查看 Django Rest 框架的文档时,也使用了四个参数。
class PostOwnerPermssion(permissions.BasePermission):
"""
Check if authenticated user is story author
"""
def has_object_permission(self,request,obj,**kwargs):
if request.user.id == story.author:
return True
return False
我很高兴得到任何澄清。
谢谢。
最佳答案
However, when I check the documentation for the Django Rest framework, four arguments are also used.
class PostOwnerPermssion(permissions.BasePermission): """ Check if authenticated user is story author """ def has_object_permission(self,request,obj,**kwargs): if request.user.id == story.author: return True return False
否,**kwargs
与任意数量的named 参数匹配,因此您可以使用 my_post_owner_permssion.has_object_permission(request, some_obj<b>, foo=bar, qux=bar2</b>)`
调用它但不位置参数(没有名称的参数)。
您可以实现以下一种(或两种)方法:
-
.has_permission(self, request, view)
;和 -
.has_object_permission(self, request, view, obj)
您的案例中缺少的是 view
参数,因此您可以将其重写为:
class PostOwnerPermssion(permissions.BasePermission):
"""
Check if authenticated user is story author
"""
def has_object_permission(self, request, <b>view</b>, obj):
return <b>request.user.id == obj.author_id</b>
关于python - 如何解决错误 "object_permission() takes 3 positional arguments but 4 were given"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61938708/