Ya no necesitas buscar más por todo internet ya que estás al espacio necesario, poseemos la solución que quieres pero sin problema.
Solución:
Para aquellos que usan DRF 3.1 o superior, están cambiando la forma predeterminada en que se maneja la paginación. Consulte http://www.django-rest-framework.org/topics/3.1-announcement/ para obtener más información.
Ahora, si desea habilitar la paginación para un ModelViewSet, puede hacerlo globalmente configurando su archivo settings.py:
REST_FRAMEWORK =
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 100
O si solo lo desea para un ModelViewSet, puede configurar manualmente pagination_class solo para ese conjunto de vistas.
from rest_framework.pagination import PageNumberPagination
class StandardResultsSetPagination(PageNumberPagination):
page_size = 100
page_size_query_param = 'page_size'
max_page_size = 1000
class FooViewSet(viewsets.ModelViewSet):
pagination_class = StandardResultsSetPagination
Esto también le permite modificar la forma en que se maneja la paginación solo para ese conjunto de vistas.
DRF 3.1 también ha introducido nuevos tipos de esquemas de paginación predeterminados que puede usar, como LimitOffset y Cursor.
La paginación solo se realiza automáticamente si está utilizando vistas genéricas o conjuntos de vistas
El primer obstáculo es traducir los documentos al inglés. Lo que pretendían transmitir es que deseas una vista genérica. Los conjuntos de vistas genéricos se extienden desde ApiViews genéricos que tienen métodos de clase adicionales para paginar conjuntos de consultas y respuestas.
Además, usted está proporcionando su propia list
método, pero el proceso de paginación predeterminado en realidad es manejado por el mixin:
class ListModelMixin(object):
"""
List a queryset.
"""
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(self.get_queryset())
page = self.paginate_queryset(queryset)
if page is not None:
serializer = self.get_serializer(page, many=True)
return self.get_paginated_response(serializer.data)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
La solución fácil, use el código del marco:
class Foo(mixins.ListModelMixin, viewsets.GenericViewSet):
queryset = User.objects.all()
serializer = UserSerializer
La solución más compleja sería si necesita un personalizado list
método, entonces debe escribirlo como mejor le parezca, pero con el estilo del fragmento de código de mezcla anterior.
Intenta proporcionar una variable de clase
paginate_by = 10 #This will paginate by 10 results per page.
Crear una costumbre ViewSet
que realiza solo list
operación como su caso para aquí actualmente.
class ListModelViewSet(mixins.ListModelMixin, viewsets.GenericViewSet):
pass
Ahora hereda tu clase Foo
con este conjunto de vistas personalizado
class Foo(ListModelViewSet):
paginate_by = 10
def list(self, request):
queryset = User.objects.all()
serializer = UserSerializer(queryset, many=True)
return Response(serializer.data)
Esto debería ayudarlo a que la paginación funcione.
Nos puedes añadir valor a nuestro contenido colaborando tu veteranía en las crónicas.