Django rest как сделать пагинацию с помощью PageNumberPagination
Я написал следующие коды. Но когда я перехожу по url posts?page=1, он по-прежнему показывает все объекты модели Post. Что мне делать?
settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
ursl.py
path('posts', views.posts_view, name='posts_view')
views.py
@api_view(['GET'])
def posts_view(request):
posts = Post.objects.all()
serializer = PostSerializer(posts, many=True)
return Response(serializer.data)
Вы пишете представление на основе функций, поэтому вам нужно все делать вручную. Если возможно, вам следует полагаться на предоставляемые общие базовые api представления вместо того, чтобы пытаться переписать это:
class PostView(generics.ListAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
path('posts', PostView.as_view(), name='posts_view')
Чтобы сделать это вручную, вам нужно создать и вызвать пагинацию так же, как это делают базовые классы:
def my_view(request):
qs = Post.objects.all()
pagination = PageNumberPagination()
page = pagination.paginate_queryset(qs, request)
serializer = PostSerializer(page, many=True)
return pagination.get_paginated_response(
serializer.data
)