如何获取django restframework中的参数PK权限?

w6lpcovy  于 2023-02-25  发布在  Go
关注(0)|答案(3)|浏览(137)

我在Django中有这样的权限:

class PermissionName(BasePermission):
    

    def has_object_permission(self, request, view, obj):

        if request.method in SAFE_METHODS:
            return True
        #I want to extract the pk or id params in here.

        return False

有人能帮我得到请求的参数吗?我尝试使用self.kwargs["pk"]request.POST['pk'],但它们都返回说对象没有属性。

von4xj4u

von4xj4u1#

如果pk是POST请求的一个参数,您可以使用request.POST.get('pk')访问它。在您的帖子中,您没有使用get(),所以这可能是问题所在。
如果对象是作为函数的参数提供的,我假设您需要它的ID,这也可以通过obj.id实现。

lx0bsm1f

lx0bsm1f2#

假设您的路径是:

path('listings/get/category/<str:pk>/', endpoints.HousesWithSameCategory.as_view()),

您的要求:api/listings/get/category/1/
在类方法视图中用途:

def get_queryset(self):
    print(self.kwargs)

这将返回{'pk': '1'}
self.kwargs将返回所有动态参数

myzjeezk

myzjeezk3#

如果你的url中只有一个pk,那么你就使用has_object_permission

class PermissionName(BasePermission):
    
    def has_object_permission(self, request, view, obj):
        obj.pk # To get object id.

但是,如果您的url中有两个以上的pk,该怎么办

urls.py

path("buildings/<int:pk>/units/<int:unit_pk>/")

然后可以从view属性中获取pk's

class PermissionName(BasePermission):
    
    def has_object_permission(self, request, view, obj):
        print(view.kwargs)

结果:
{'pk': 13, 'unit_pk': 71}

相关问题