【发布时间】:2014-08-14 04:46:26
【问题描述】:
我正在使用带有nested router extension 的Django REST 框架。我的一条路线如下所示:companies/$company/locations/$location 其中$company 和$location 是slug 变量。
我希望允许用户发布到此 URL:companies/$company/locations/ 以添加新位置。我想确保执行 POST 的用户对他正在发布的公司具有更正权限。我目前使用django-guardian 作为我的对象级权限。 POST 消息仅包含新位置的名称,它不包含可以从 URL 推断出的公司名称。
在这种情况下,我很难正确执行权限。我一直在从视图集的 pre_save 方法中设置新的 Location 对象的 company 字段,但这对于应用权限检查来说为时已晚。
执行此操作的最佳方法是什么?
如果用户确实在 POST 中包含公司,我可以通过将以下内容添加到视图集中来验证公司:
def get_queryset(self):
parent = super(LocationViewSet, self).get_queryset()
return parent.filter(company__slug=self.kwargs['company_slug'])
【问题讨论】:
-
您找到解决方案了吗?
-
@alex 你是如何在 pre_save 方法中获得公司信息的?我也在寻找您实际问题的答案
-
你能发布网址和视图和序列化程序吗?
标签: django django-rest-framework nested-routes django-guardian