Отключите разбиение на страницы, когда не запрашиваете какую-либо страницу в djangorestframework - PullRequest
0 голосов
/ 24 сентября 2018

Я написал класс разбиения на страницы, как показано ниже для API ListView.

class PhotoListPagination(PageNumberPagination):
   page_size = 100
   page_size_query_param = 'page_size'
   max_page_size = 10000

и использую его в своем представлении API как pagination_class:

class UserSinglePhotoAPIView(ListAPIView):
    model = Photo
    serializer_class = PhotoSerializer
    pagination_class = PhotoListPagination

    def get_queryset(self):
        return Profile.objects.get(auth_user__username=self.kwargs['username']).get_single_photos()

при отправке GET запрос на /link/to/my/API/end-point?page=1 или любой другой номер страницы, он работает довольно хорошо.в настоящее время, когда page не имеет значения (отправка запроса на /link/to/my/API/end-point), отображается страница 1. Но мне нужно иметь все результаты без нумерации страниц, когда я не установил page, введите запрос.

IsВозможно?

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

это метод paginate_queryset в общих представлениях,

def paginate_queryset(self, queryset):
    """
    Return a single page of results, or `None` if pagination is disabled.
    """
    if self.paginator is None:
        return None
    return self.paginator.paginate_queryset(queryset, self.request, view=self

, поэтому, если эта функция возвращает None, ListView вернет одну страницу, включающую все результаты, поэтому переопределите этот метод, как показано ниже:

class UserSinglePhotoAPIView(ListAPIView):
    ...
    ...
    def paginate_queryset(self, queryset):
        if self.paginator and self.request.query_params.get(self.paginator.page_query_param, None) is None:
            return None
        return super().paginate_queryset(queryset)
0 голосов
/ 24 сентября 2018

Вы можете переопределить метод list в вашем UserSinglePhotoAPIView и выполнять нумерацию страниц, только если указан параметр запроса страницы.В противном случае вернуть все.

Примерно так:

def list(self, request, *args, **kwargs):
    queryset = self.filter_queryset(self.get_queryset())

    if 'page' in request.query_params:
        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(queryset, many=True)
    return Response(serializer.data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...