我正在使用带有嵌套路由器扩展的 Django REST 框架。我的一条路线看起来像:companies/$company/locations/$location
where$company
和$location
are slug 变量。
我想允许用户发布到这个 URL:companies/$company/locations/
添加新的位置。我想确保执行 POST 的用户对他正在发布的公司具有更正权限。我目前django-guardian
用于我的对象级权限。POST 消息仅包含新位置的名称,它不包含可以从 URL 推断出的公司名称。在这种情况下,我很难正确执行权限。我一直在从视图集的方法中设置company
新Location
对象的字段,pre_save
但这对于应用权限检查来说为时已晚。
执行此操作的最佳方法是什么?
如果用户确实在 POST 中包含公司,我可以通过将以下内容添加到视图集中来验证公司:
def get_queryset(self):
parent = super(LocationViewSet, self).get_queryset()
return parent.filter(company__slug=self.kwargs['company_slug'])