动态限制相关字段的查询集

发布于 2021-01-29 15:07:21

我想使用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渲染器中下拉列表中填充的唯一值?

关注者
0
被浏览
56
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我最终做了类似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下拉字段都起作用。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看