嵌套路由上的Django REST权限

嵌套路由上的Django REST权限,django,django-rest-framework,nested-routes,django-guardian,Django,Django Rest Framework,Nested Routes,Django Guardian,我使用的是Django REST框架。我的一条路线看起来像:companys/$company/locations/$location,其中$company和$location是slug变量 我想允许用户发布到此URL:公司/$company/locations/以添加新的位置。我想确保发布帖子的用户对他要发布到的公司拥有更正权限。我目前使用django-guardian作为我的对象级权限。POST消息只包含新位置的名称,不包含可以从URL推断的公司名称。 在这种情况下,我很难正确执行权限。我一

我使用的是Django REST框架。我的一条路线看起来像:
companys/$company/locations/$location
,其中
$company
$location
是slug变量

我想允许用户发布到此URL:
公司/$company/locations/
以添加新的位置。我想确保发布帖子的用户对他要发布到的公司拥有更正权限。我目前使用
django-guardian
作为我的对象级权限。POST消息只包含新位置的名称,不包含可以从URL推断的公司名称。 在这种情况下,我很难正确执行权限。我一直在从视图集的
pre_save
方法设置新
位置
对象的
company
字段,但这太晚了,无法应用权限检查

实施这一点的最佳方式是什么

如果用户确实在帖子中包含公司,我可以通过将以下内容添加到视图集中来验证公司:

def get_queryset(self):
    parent = super(LocationViewSet, self).get_queryset()    
    return parent.filter(company__slug=self.kwargs['company_slug'])

实际上,我发现了一种相当丑陋的方法,检索父对象并根据请求的用户检查它的归属

def create(self, request, *args, **kwargs):
    request.data['catspad'] = kwargs['catspad_pk']
    if not Catspad.objects.get(id=kwargs['catspad_pk']).owner == request.user:
        return Response(status=HTTP_401_UNAUTHORIZED)
    serializer = self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    self.perform_create(serializer)
    headers = self.get_success_headers(serializer.data)
    return Response(serializer.data, status=HTTP_201_CREATED, headers=headers)

你找到解决办法了吗?@alex你是如何在pre_save方法中得到公司slug的?我也在寻找你实际问题的答案,你能发布URL、视图和序列化程序吗?