为什么我的 django rest-framework 分页不起作用?
Why does my django rest-framework pagination does not work?
我有一个 Django Restframework 项目。
这是我的观点:
class JobView(viewsets.ReadOnlyModelViewSet):
queryset = Job.objects.all()
serializer_class = JobSerializer
filter_backends = [filters.OrderingFilter, DjangoFilterBackend, filters.SearchFilter]
search_fields = [...]
ordering_fields = ['jobId']
ordering = ['-jobId']
filterset_fields = ['jobId', 'status']
pagination_class = StandardResultsSetPagination
和我的分页 class:
class StandardResultsSetPagination(LimitOffsetPagination):
page_size = 1
视图在路由器中注册:
router.register(r'jobs', JobView)
问题是,它根本不分页。它只是忽略 pagination_class 属性。
我也试过:
class JobView(generics.ListAPIView)
并在没有路由器的情况下注册了视图。但问题是一样的。它不分页,只是 returns 一个包含所有工作的 json 列表。
如果不在settings.py全局为项目定义分页,如何在这个视图中实现分页?
您的 StandardResultsSetPagination
是否继承了正确的分页样式? LimitOffsetPagination does not limit the output by default (aside from the PAGE_SIZE
setting) and requires query parameters to set the limit. It also does not have a page_size
class attribute, contrary to PageNumberPagination.
只需尝试用以下代码替换您的分页 class
from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination):
page_size = 5
page_size_query_param = 'page_size'
如果你没有设置default_limit
并调用/jobs
,它会正常显示结果。在 LimitOffsetPagination
的情况下,您需要在请求中指定限制和偏移量或指定 default_limit
以查看差异。
我有一个 Django Restframework 项目。 这是我的观点:
class JobView(viewsets.ReadOnlyModelViewSet):
queryset = Job.objects.all()
serializer_class = JobSerializer
filter_backends = [filters.OrderingFilter, DjangoFilterBackend, filters.SearchFilter]
search_fields = [...]
ordering_fields = ['jobId']
ordering = ['-jobId']
filterset_fields = ['jobId', 'status']
pagination_class = StandardResultsSetPagination
和我的分页 class:
class StandardResultsSetPagination(LimitOffsetPagination):
page_size = 1
视图在路由器中注册:
router.register(r'jobs', JobView)
问题是,它根本不分页。它只是忽略 pagination_class 属性。
我也试过:
class JobView(generics.ListAPIView)
并在没有路由器的情况下注册了视图。但问题是一样的。它不分页,只是 returns 一个包含所有工作的 json 列表。
如果不在settings.py全局为项目定义分页,如何在这个视图中实现分页?
您的 StandardResultsSetPagination
是否继承了正确的分页样式? LimitOffsetPagination does not limit the output by default (aside from the PAGE_SIZE
setting) and requires query parameters to set the limit. It also does not have a page_size
class attribute, contrary to PageNumberPagination.
只需尝试用以下代码替换您的分页 class
from rest_framework.pagination import PageNumberPagination
class CustomPagination(PageNumberPagination):
page_size = 5
page_size_query_param = 'page_size'
如果你没有设置default_limit
并调用/jobs
,它会正常显示结果。在 LimitOffsetPagination
的情况下,您需要在请求中指定限制和偏移量或指定 default_limit
以查看差异。