有没有办法限制 DRF可浏览API 中填充的字段(例如下拉选择器或列表选择器)?
下面是DRF如何建议用户选择“项目”的图像示例。但是,登录用户可能有也可能无法访问这些项目,所以我想控制这里出现的内容!似乎默认行为是显示所有相关对象。
如果有一种方法可以链接这些字段中填充的对象,并根据get_queryset()
函数进行设置,那将非常有用。
这个页面似乎暗示它可能是有可能的,我只是找不到如何做的例子:http://www.django-rest-framework.org/api-guide/filtering/
答案 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', ...)