Mar*_*air 5 python django django-rest-framework
我有一个简单的子类,viewsets.ViewSet它看起来像:
from rest_framework import viewsets
from rest_framework.response import Response
from ..models import Entry, Sitting, Source, Venue
from .serializers import (
SittingSerializer, SittingWithEntriesSerializer,
)
class SittingViewSet(viewsets.ViewSet):
def list(self, request, version=None):
queryset = Sitting.objects.order_by('id')
serializer = SittingSerializer(
queryset, many=True, context={'request': request}
)
return Response(serializer.data)
def retrieve(self, request, pk=None, version=None):
prefetch_qs = Entry.objects.select_related('speaker')
queryset = Sitting.objects.order_by('id') \
.prefetch_related(Prefetch('entry_set', queryset=prefetch_qs))
sitting = get_object_or_404(queryset, pk=pk)
serializer = SittingWithEntriesSerializer(
sitting, context={'request': request}
)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
但是,列表视图没有分页,就像您使用ModelViewSet. 我正在使用的设置是:
# Django Rest Framework settings:
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': ('pombola.api.permissions.ReadOnly',),
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.URLPathVersioning',
'PAGE_SIZE': 10,
}
Run Code Online (Sandbox Code Playgroud)
该文档建议查看mixins.ListModelMixin和generics.GenericAPIView类的源代码,但我无法轻松了解如何重新应用它们为这些 ViewSet 方法对结果进行分页。
任何人都可以建议更改此示例以获取list视图分页的最简单方法是什么?
您重写了 list 方法,因此它不会对您的数据进行分页。
如果你检查一下,ListModelMixins我想这可能是你的答案:
class SittingViewSet(
viewsets.GenericViewSet,
mixins.ListModelMixin,
mixins.RetrieveModelMixin):
def list(self, request, *args, **kwargs):
queryset = self.filter_queryset(
Sitting.objects.order_by('id')
)
page = self.paginate_queryset(queryset)
if page is not None:
serializer = SittingSerializer(
page,
many=True,
context={'request': request}
)
return self.get_paginated_response(serializer.data)
serializer = SittingSerializer(
queryset,
many=True,
context={'request': request}
)
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4108 次 |
| 最近记录: |