Как разбить возвращаемый список из viewset в DRF? - PullRequest
0 голосов
/ 03 марта 2020

В отношении вопроса, заданного ранее: Аналогичный вопрос, связанный с нумерацией страниц

Я все еще не получаю метаданные (количество, предыдущий и следующий) в ответе.

class LinkHeaderPagination(pagination.PageNumberPagination):
    page_size_query_param = 'page_size'

    def get_paginated_response(self, data):
        next_url = self.get_next_link()
        previous_url = self.get_previous_link()

        if next_url is not None and previous_url is not None:
            link = '<{next_url}>; rel="next", <{previous_url}>; rel="prev"'
        elif next_url is not None:
            link = '<{next_url}>; rel="next"'
        elif previous_url is not None:
            link = '<{previous_url}>; rel="prev"'
        else:
            link = ''

        link = link.format(next_url=next_url, previous_url=previous_url)
        headers = {'Link': link, 'Count': self.page.paginator.count} if link else {}

        return Response(data, headers=headers)

    def list(self, request, *args, **kwargs):
            queryset= User.objects.all().values_list('name','designation')
            queryset=[{'name':i[0],'designation':i[1]} for i in queryset]
            serializer=getuserserializer(queryset,many=True)
            paginator = LinkHeaderPagination()
            page = paginator.paginate_queryset(new_dict, request)
            if page is not None:
               return paginator.get_paginated_response(page)

            return Response(serializer.data)

1 Ответ

0 голосов
/ 03 марта 2020
# Define a class

class PageNumberPagination(pagination.PageNumberPagination):
    page_size_query_param = "page_size"

    ##
    # Returns the paginated Response.
    #
    # @param data The data that is to be displayed
    #
    # @return The paginated Response.
    #
    def get_paginated_response(self, data):
        return Response({
            "links":  {
                "next":     self.get_next_link(),
                "previous": self.get_previous_link()
            },
            "count":      self.page.paginator.count,
            "results":    data,
            "pageCount":  self.page.paginator.num_pages,
            "pageNumber": self.page.number,
            "pageSize":   self.page.paginator.per_page
        })


In setting.py file

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'app_name.pagination.PageNumberPagination',
    'PAGE_SIZE':                20,
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...