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