限制django rest browsable api中的下降选择

时间:2017-12-22 14:32:25

标签: django django-rest-framework

有没有办法限制 DRF可浏览API 中填充的字段(例如下拉选择器或列表选择器)?

下面是DRF如何建议用户选择“项目”的图像示例。但是,登录用户可能有也可能无法访问这些项目,所以我想控制这里出现的内容!似乎默认行为是显示所有相关对象。

enter image description here

如果有一种方法可以链接这些字段中填充的对象,并根据get_queryset()函数进行设置,那将非常有用。

这个页面似乎暗示它可能是有可能的,我只是找不到如何做的例子:http://www.django-rest-framework.org/api-guide/filtering/

1 个答案:

答案 0 :(得分:0)

如果您只需要显示确切的值,我就不能完全理解您的需求,但可以尝试查询集过滤器的__in功能:

class PurchaseList(generics.ListAPIView):
    serializer_class = PurchaseSerializer

    def get_queryset(self):
        """
        Optionally restricts the returned purchases to a given user,
        by filtering against a `username` query parameter in the URL.
        """ 
        to_show = [ "user1", "user2", "user3"]
        queryset = Purchase.objects.all()
        username = self.request.query_params.get('username', None)
        if username is not None:
            queryset = queryset.filter(purchaser__username__in=username)
        return queryset

您可以将您的值添加到to_show列表,如果queryset元素等于其中一个,则会显示它。 此外,如果您只想显示模型的某些字段,则需要编辑序列化程序的fields参数:

class PurchaseList(serializers.ModelSerializer):
    class Meta:
        model = Purchase
        fields = ('id', 'field1', 'field2', ...)
相关问题