"get_paginated_response" 在 django-rest-framework 3.0 中
"get_paginated_response" in django-rest-framework 3.0
在 DRF 3.1 中,我可以这样做以获得分页响应,但似乎 get_paginated_response()
在 3.0 中不可用。什么是等效的?
class NoteList(ListCreateAPIView):
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
paged_queryset = self.paginate_queryset(queryset)
serializer = NoteSerializer(paged_queryset, many=True)
return self.get_paginated_response(serializer.data)
它是 PaginationSerializer
,通过以下方式设置序列化程序 class:
'DEFAULT_PAGINATION_SERIALIZER_CLASS': 'YourCustomPaginationSerializer'
或
class MyView(generics.GenericAPIView):
pagination_serializer_class = YourCustomPaginationSerializerClass
mixin.py
def list(self, request, *args, **kwargs):
instance = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(instance)
if page is not None:
serializer = self.get_pagination_serializer(page)
else:
serializer = self.get_serializer(instance, many=True)
return Response(serializer.data)
generics.py
def get_pagination_serializer(self, page):
"""
Return a serializer instance to use with paginated data.
"""
class SerializerClass(self.pagination_serializer_class):
class Meta:
object_serializer_class = self.get_serializer_class()
pagination_serializer_class = SerializerClass
context = self.get_serializer_context()
return pagination_serializer_class(instance=page, context=context)
如果您正在做 migration
的事情,请不要忘记 settings.py 或视图中的分页参数,已更改为新的分页器。
比如。 PAGINATE_BY_PARAM -> page_size_query_param.
无论如何,我认为新的分页器比以前的分页器舒服多了。
在 Pagination Docs
上查看更多详情
在 DRF 3.1 中,我可以这样做以获得分页响应,但似乎 get_paginated_response()
在 3.0 中不可用。什么是等效的?
class NoteList(ListCreateAPIView):
def list(self, request, *args, **kwargs):
queryset = self.get_queryset()
paged_queryset = self.paginate_queryset(queryset)
serializer = NoteSerializer(paged_queryset, many=True)
return self.get_paginated_response(serializer.data)
它是 PaginationSerializer
,通过以下方式设置序列化程序 class:
'DEFAULT_PAGINATION_SERIALIZER_CLASS': 'YourCustomPaginationSerializer'
或
class MyView(generics.GenericAPIView):
pagination_serializer_class = YourCustomPaginationSerializerClass
mixin.py
def list(self, request, *args, **kwargs):
instance = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(instance)
if page is not None:
serializer = self.get_pagination_serializer(page)
else:
serializer = self.get_serializer(instance, many=True)
return Response(serializer.data)
generics.py
def get_pagination_serializer(self, page):
"""
Return a serializer instance to use with paginated data.
"""
class SerializerClass(self.pagination_serializer_class):
class Meta:
object_serializer_class = self.get_serializer_class()
pagination_serializer_class = SerializerClass
context = self.get_serializer_context()
return pagination_serializer_class(instance=page, context=context)
如果您正在做 migration
的事情,请不要忘记 settings.py 或视图中的分页参数,已更改为新的分页器。
比如。 PAGINATE_BY_PARAM -> page_size_query_param.
无论如何,我认为新的分页器比以前的分页器舒服多了。 在 Pagination Docs
上查看更多详情