我想使用Django REST Framework,限制可以在创作的相关字段中使用的值。
例如,考虑以下示例(基于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渲染器中下拉列表中填充的唯一值?
我最终做了类似Khamaileon在这里建议的操作。基本上,我修改了序列化器以查看请求,这闻起来很不对劲,但是它完成了工作……这是它的外观(以购买示例为例):
class PurchaseSerializer(serializers.HyperlinkedModelSerializer): def get_fields(self, *args, **kwargs): fields = super(PurchaseSerializer, self).get_fields(*args, **kwargs) fields['purchaser'].queryset = permitted_objects(self.context['view'].request.user, fields['purchaser'].queryset) return fields class Meta: model = Purchase
allowed_objects是一个接受用户和查询并返回仅包含用户有权链接到的对象的过滤查询的函数。这似乎对验证和可浏览的API下拉字段都起作用。