Как получить размер page_size в запросе в структуру метаданных пагинации django rest framework - PullRequest
0 голосов
/ 02 января 2019

Я настроил пользовательскую нумерацию страниц для одного из моих приложений, с которыми я сталкиваюсь, проблема заключается в том, что размер_страницы показывает только значение по умолчанию, которое установлено в приложении, но не изменяется в соответствии со значениями, отправленными в параметре запроса. Куда я иду не так?

class CustomPagination(PageNumberPagination):
    page_size = 10
    page_size_query_param = 'page_size'

    def get_paginated_response(self, data):
        return Response({"status": True,
                         "data": {
                             'results': data,
                             "meta": {
                                 'page_count':self.page.paginator.num_pages,
                                 'total_results': self.page.paginator.count,
                                 'current_page_no': self.page.number,
                                 'limit': self.page_size,
                                 'last_page': self.page.has_next()
                             }}}, 
                         status=status.HTTP_200_OK)

Выходные данные page_size всегда равны 10, даже если я установил для параметра запроса другое значение. Например: он должен измениться на 2, если пользователь установил page_size = 2 в параметрах запроса.

редактирование:

Код для просмотра

class ListPCAPIView(ListAPIView):
serializer_class = ListPCSerializer

def get(self, request):
    user = self.request.user
    pc = Pc.objects.filter(
        user_id=user).order_by('pc_name')
    if pc:
        page = self.paginate_queryset(pc)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)
    else:
        raise CustomException(
            detail="pc list is empty.",
            status_code=status.HTTP_400_BAD_REQUEST)

1 Ответ

0 голосов
/ 04 января 2019

paginate_queryset() принимает request в качестве второго позиционного аргумента. request необходим, чтобы из него можно было получить page_size.

Вы не передаете request, поэтому мне любопытно понять, почему представление вообще работает - поскольку Python должен вызвать TypeError из-за неверного числа аргументов.

В любом случае, попробуйте обновить ваш код, передав ему request в качестве второго аргумента:

page = self.paginate_queryset(pc, request)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...