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

Views.py

class CountryViewSet(viewsets.ViewSet):   
    serializer_class = CountrySerializer
    pagination_class = LimitOffsetPagination
    def list(self,request):
        try:
            country_data = Country.objects.all()
            country_serializer = CountrySerializer(country_data,many=True)
            return Response(            
                data = country_serializer.data,
                content_type='application/json',            
                )
        except Exception as ex:
            return Response(
                data={'error': str(ex)},
                content_type='application/json',
                status=status.HTTP_400_BAD_REQUEST
                )

Settings.py я добавил

'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',

в моем urls.py

router = routers.DefaultRouter(trailing_slash=False)

router.register(r'country', CountryViewSet, base_name='country')
urlpatterns = [
    url(r'^', include(router.urls)),
]

Когда я пытаюсь с этим URL http://192.168.2.66:8001/v1/voucher/country он возвращает все данные.

Но когда я пытаюсь с этим URL http://192.168.2.66:8001/v1/voucher/country/?limit=2&offset=2

но он возвращает ошибку 404. Я новичок в django. Пожалуйста, помогите мне:)

1 ответ

Решение

Использование ModelViewSet не ViewSet, Также удалите свою функцию списка, она автоматически отправит ответ.

from rest_framework.pagination import LimitOffsetPagination

class CountryViewSet(viewsets.ModelViewSet):
    """
    A simple ViewSet for viewing and editing country.
    """ 
    queryset = Country.objects.all()
    serializer_class = CountrySerializer
    pagination_class = LimitOffsetPagination

Действия, предоставляемые классом ModelViewSet:.list (),.retrieve (),.create (),.update (),.partial_update () и.destroy ().

ОБНОВИТЬ

В твоих settings.py

REST_FRAMEWORK = {
    'PAGE_SIZE': 10,
    # 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
}

ОБНОВЛЕНИЕ 2

Кроме того, вы можете просто использовать paginate_queryset а также get_paginated_response

def list(self,request):
    country_data = Country.objects.all()

    page = self.paginate_queryset(country_data)
    if page is not None:
       serializer = self.get_serializer(page, many=True)
       return self.get_paginated_response(serializer.data)

    serializer = self.get_serializer(country_data, many=True)
    return Response(serializer.data)

Ссылка: маркировка дополнительных действий для маршрутизации

Другие вопросы по тегам