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

标签 python django django-rest-framework permissions

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

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/

相关文章:

Django/Python : How to change filename when saving file using models. 文件字段?

python - 如何在不使用源代码的情况下使用 .pyc 文件运行 Django 项目?

javascript - 使用flask加载js中的目录

python - 使用python用HTML表单 "fillable pdf"数据填写 "post"?

javascript - Django 管理员预填充字段不是错误 "d.Keyup is not a function"

django - 如何使用 Coffin 在 Django 应用程序中通过 Jinja2 将对象放入模板

python - 在 Django Rest Framework 中保存相关的嵌套对象

django - 设置 django-oauth-toolkit 后无法访问管理面板

Python将二进制图像(PNG)数据写入文件

python - 在 python 中使用 writer 后行之间的空白