返回Get中的id列表。 Django Rest Framework

时间:2017-01-25 11:32:59

标签: python django django-rest-framework

我有一个名为“document-detail-sample”的模型,当你使用GET调用它时,就像这样, GET https://url/document-detail-sample/然后你得到每一个“文档细节 - 样品”。

模型内部是id。所以,如果你想要每个Id,你可以在列表上“迭代”并询问id。容易。

但......前端开发人员不想这样做:D他们说这是太多的工作......

所以,我必须返回id列表。 :D

我在想像 GET https://url/document-detail-sample/id-list

但我不知道如何只返回一个清单。我读了this post,我知道如何在后端获取id_list。但我不知道应该实现什么才能返回该网址中的列表...

我认为这很简单:

class DocumentDetailSampleViewSet(viewsets.ModelViewSet):
    queryset = DocumentDetailSample.objects.all()
    serializer_class = DocumentDetailSampleSerializer

并且网址如此:

router.register(r'document-detail-sample', DocumentDetailSampleViewSet)

所以:

1 - 使用.../document-detail-sample/id-list"这样的网址做一个好主意吗?

2 - 如果是,我该怎么办?

3 - 如果没有,那我该怎么办?

2 个答案:

答案 0 :(得分:5)

您可以使用@list_route装饰器

from rest_framework.decorators import detail_route, list_route
from rest_framework.response import Response

class DocumentDetailSampleViewSet(viewsets.ModelViewSet):
    queryset = DocumentDetailSample.objects.all()
    serializer_class = DocumentDetailSampleSerializer

    @list_route()
    def id_list(self, request):
        q = self.get_queryset().values('id')
        return Response(list(q))

此装饰器允许您提供与方法同名的其他端点。 /document-detail-sample/id_list/
reference to docs about extra actions in a viewset

答案 1 :(得分:1)

假设您不需要分页,只需覆盖list方法,如此

class DocumentDetailSampleViewSet(viewsets.ModelViewSet):
    queryset = DocumentDetailSample.objects.all()
    serializer_class = DocumentDetailSampleSerializer


    def list(self, request):
        return Response(self.get_queryset().values_list("id", flat=True))