【发布时间】:2019-11-09 09:11:49
【问题描述】:
我正在尝试创建一个 has_object_permission 函数,该函数位于自定义类的 permissions.py 文件中:
class IsOwnerOrAdmin(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
print("has object permissions statement")
return obj.owner == request.user
def has_permission(self, request, view):
print("has permissions statement")
return request.user and request.user.is_authenticated
我的视图集如下所示:
class SchoolViewSet(viewsets.ModelViewSet):
queryset = School.objects.all()
serializer_class = SchoolSerializer
permission_classes = [IsOwnerOrAdmin,
IsOwnerOrAdmin.has_object_permission()]
...
我在调用 /schools/ 端点时收到以下错误:
TypeError: has_object_permission() missing 4 required positional
arguments: 'self', 'request', 'view', and 'obj'
但是,has_permissions 工作正常,我不必在我的 permission_classes 数组中显式调用它。它只是被调用。我如何传递这些论点?我这样做正确吗?我尝试了一些通过 self、通过 SchoolViewSet、通过obj=queryset 等的变体。不确定这是否正确。在互联网上找不到我需要解决此问题的确切内容。
更新 如何更改代码以调用 has_object_permission,就像自动调用 has_permission 一样?
【问题讨论】:
标签: django-rest-framework permissions arguments