gpt4 book ai didi

python - 如何解决错误 "object_permission() takes 3 positional arguments but 4 were given"?

转载 作者:行者123 更新时间:2023-12-02 16:39:45 26 4
gpt4 key购买 nike

我正在尝试实现对象级权限。当我运行我的代码时,我收到一条错误消息,指出我使用了太多位置参数。

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>)` 调用它但位置参数(没有名称的参数)。

您可以实现以下一种(或两种)方法:

  1. .has_permission(self, request, view) ;和
  2. .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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com