使用Django REST框架,我想限制哪些值可以在创建的相关字段中使用。
例如,考虑以下示例(基于http://django-rest-framework.org/api-guide/filtering.html上的筛选示例,但已更改为ListCreateAPIView):
class PurchaseList(generics.ListCreateAPIView)
model = Purchase
serializer_class = PurchaseSerializer
def get_queryset(self):
user = self.request.user
return Purchase.objects.filter(purchaser=user)
在本例中,如何确保在创建时买方可能只等于self.request.user,并且这是可浏览API呈现程序中表单下拉列表中填充的唯一值?
我是这样做的:
我不喜欢在需要访问用户数据或运行时实例来限制queryset的每个地方都必须重写init方法的风格。所以我选择了this solution。
这是内联代码。
这样做的唯一缺点是需要显式设置相关的序列化程序字段,而不是使用由
ModelSerializer
提供的自动字段发现。不过,我希望默认情况下rest_框架中会包含类似的内容。我最后做了类似于Khamaileon suggested here的事情。基本上,我修改了序列化程序以窥视请求,哪种味道不对,但它完成了任务。。。下面是它的外观(以购买示例为例):
permitted_objects是一个函数,它接受一个用户和一个查询,并返回一个筛选查询,该查询只包含用户有权链接到的对象。这似乎对验证和可浏览的API下拉字段都有效。
相关问题 更多 >
编程相关推荐