Как я могу использовать ограничение нумерации страниц для наборов
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)
Ссылка: маркировка дополнительных действий для маршрутизации