【问题标题】:Add new values at Django rest framework pagination在 Django 休息框架分页中添加新值
【发布时间】:2021-05-08 06:47:49
【问题描述】:

我想在分页返回时添加“isSuccess”。

例如,

{
    "count": 1234,
    "next": "http://mydomain/?page=2",
    "previous": null,
    "isSuccess" : 'Success'  # <---- this one
    "results": [
        {
          'id':123,
           'name':'abc'
        }, 
        {
          'id':234,
          'name':'efg'
        },
         ...
    ]
}

我找到了this way,但它没有用。 如何在 Django 分页返回时添加新值?

这是我的尝试:

class Testing(generics.GenericAPIView):
    queryset = Problem.objects.all()
    serializer_class = userSerializer
    pagination_class = userPagination

    def get(self, request):
        queryset = self.get_queryset()
        page = self.request.query_params.get('page')

        if page is not None:
            paginate_queryset = self.paginate_queryset(queryset)
            serializer = self.serializer_class(paginate_queryset, many=True)

            tmp = serializer.data
            tmp['isSuccess'] = 'Success'

            return self.get_paginated_response(tmp)

【问题讨论】:

    标签: python django django-rest-framework django-pagination


    【解决方案1】:

    试一试,不要将isSuccess添加到serializer.data,而是将其添加到get_paginated_response().data

    def get(self, request):
        queryset = self.get_queryset()
        page = self.request.query_params.get('page')
    
        if page is not None:
            paginate_queryset = self.paginate_queryset(queryset)
            serializer = self.serializer_class(paginate_queryset, many=True)
    
            tmp = serializer.data
            # tmp['isSuccess'] = 'Success'
    
            response = self.get_paginated_response(tmp)
            response.data['isSuccess'] = "Success"
    
            return Response(data=response.data, status=status.HTTP_200_OK)
    
        return Response(data="No Page parameter found", status=status.HTTP_200_OK)
    

    响应将类似于

    {
        "count": 1234,
        "next": null,
        "previous": null,
        "results": [
            {
              'id':123,
               'name':'abc'
            },
            ...
        ],
        "isSuccess" : 'Success'
    }
    

    【讨论】:

      【解决方案2】:

      您可以尝试覆盖PageNumberPagination 中的get_paginated_response 方法

      例子:

      from rest_framework.pagination import PageNumberPagination
      from collections import OrderedDict
      
      
      class CustomPagination(PageNumberPagination):
      
          def get_paginated_response(self, data):
              return Response(OrderedDict([
                  ('count', self.page.paginator.count),
                  ('next', self.get_next_link()),
                  ('previous', self.get_previous_link()),
                  ('results', data),
      
                  ('isSuccess', "Success")  # extra
              ]))
      
      

      【讨论】:

        猜你喜欢
        • 2013-04-08
        • 2021-11-26
        • 1970-01-01
        • 2015-02-25
        • 2016-04-25
        • 2016-03-23
        • 2016-06-20
        相关资源
        最近更新 更多