Django Rest Framework Pagination: более чистый способ вернуть страницу, содержащую запрошенные данные - PullRequest
0 голосов
/ 23 мая 2019

У меня есть класс CustomPagination, который может искать данные поста и возвращать страницу, содержащую эти данные.Это работает.Однако при работе с кучей данных это может вызвать проблемы с производительностью.Мне нужно реализовать более чистый способ поиска данных поста без перебора страниц и воздерживаться от использования таких констант, как число = 1

pagination.py

class CustomPagination(PageNumberPagination):

   def paginate_queryset(self, queryset, request, view=None):
      page_size = self.get_page_size(request)
      if not page_size:
         return None

      paginator = self.django_paginator_class(queryset, page_size)
      page_number = request.query_params.get(self.page_query_param, 1)

      if page_number in self.last_page_strings:
         page_number = paginator.num_pages

      id = request.query_params.get('id', None)

      if id:
         post = Post.objects.get(pk=id)
         number = 1
         while number <= paginator.num_pages:
            self.page = paginator.page(number)
            if post in list(self.page):
               break
            number += 1
      else:
         self.page = paginator.page(page_number)


      if paginator.num_pages > 1 and self.template is not None:
         self.display_page_controls = True

      self.request = request

      return list(self.page)

   def get_paginated_response(self, data):
      return Response({
      'next': self.get_next_link(),
      'previous': self.get_previous_link(),
      'count': self.page.paginator.count,
      'total_pages': self.page.paginator.num_pages,
      'results': data
   })
...