Django Rest framework переопределяет размер страницы в наборе представлений

у меня проблема с разбиением на страницы Django rest framework. Я установил разбиение на страницы в настройках, таких как -

'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 1

ниже мой viewset.

class HobbyCategoryViewSet(viewsets.ModelViewSet):    
    serializer_class = HobbyCategorySerializer
    queryset = UserHobbyCategory.objects.all()

Я хочу установить другой размер страницы для этого набора представлений. Я попытался установить переменные класса page_size и Paginate_by, но список разбивается на страницы в соответствии с page_size, определенным в настройках. Есть идеи, где я ошибаюсь ?

3 ответов


используйте параметры запроса размера страницы для динамического предоставления размера страницы..

from rest_framework.pagination import PageNumberPagination

class StandardResultsSetPagination(PageNumberPagination):
    page_size_query_param = 'limit'

установить класс разбиения на страницы по умолчанию в настройках

REST_FRAMEWORK = {'DEFAULT_PAGINATION_CLASS': 'StandardResultsSetPagination',}

теперь в вашем URL укажите limit в качестве параметра GET..

http://example.com/list/?limit=100 или 25


я исправил это, создав пользовательский класс разбиения на страницы. и установка желаемого pagesize в классе. Я использовал этот класс как pagination_class в моем viewset.

from rest_framework import pagination

class ExamplePagination(pagination.PageNumberPagination):       
       page_size = 2

class HobbyCategoryViewSet(viewsets.ModelViewSet):    
    serializer_class = HobbyCategorySerializer
    queryset = UserHobbyCategory.objects.all()
    pagination_class=ExamplePagination

Я не уверен, если есть простой способ для этого. это сработало на меня. Но я думаю, что нехорошо создавать новый класс только для изменения page_size.

Edit-простое решение устанавливается как

pagination.PageNumberPagination.page_size = 100 

в ViewSet.

class HobbyCategoryViewSet(viewsets.ModelViewSet):    
    serializer_class = HobbyCategorySerializer
    queryset = UserHobbyCategory.objects.all()
    pagination.PageNumberPagination.page_size = 100 

Если вы пытаетесь изменить "размер страницы" класса LimitOffsetPagination, вы должны переопределить default_limit переменной вместо размер_страницы:

from rest_framework import paginationclass 


CustomLimitOffsetPagination(pagination.LimitOffsetPagination):
    default_limit = 5