Django使用自定义API视图进行框架分页

Nar*_*art 6 python django pagination django-rest-framework

我试图在我的项目中添加分页,找不到任何明确的文档或教程.

我有一份办公室名单

模型Office.py

class Office(Model):
    name = CharField(_("name"), default=None, max_length=255, null=True)
    email = EmailField(_("email"), default=None, max_length=255, null=True)
    description = TextField(_("description"), default=None, null=True)
Run Code Online (Sandbox Code Playgroud)

串行

class OfficeSerializer(ModelSerializer):
     id = IntegerField(read_only=True)
     name = CharField(read_only=True)
     email = URLField(read_only=True)
     description = CharField(read_only=True)

class Meta:
    model = Office
    fields = ("id", "name", "email", "description")
Run Code Online (Sandbox Code Playgroud)

views.py

@api_view(["GET"])
@permission_classes((AllowAny,))
def offices(request):
    instance = Office.objects.filter()[:10]
    serializer = OfficeSerializer(instance, many=True)

    return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

使用分页返回Office列表的任何帮助?

Mic*_*oni 17

http://www.django-rest-framework.org/api-guide/pagination/

只有在使用通用视图或视图集时,才会自动执行分页.如果您使用常规APIView,则需要自己调用分页API以确保返回分页响应.有关示例,请参阅mixins.ListModelMixin和generics.GenericAPIView类的源代码.

https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/mixins.py#L35 https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/generics的.py#L166

所以我会建议像:

@api_view(["GET"])
@permission_classes((AllowAny,))
def offices(request):
    pagination_class = api_settings.DEFAULT_PAGINATION_CLASS
    paginator = pagination_class()
    queryset = Office.objects.all()
    page = paginator.paginate_queryset(queryset, request)

    serializer = OfficeSerializer(page, many=True)

    return paginator.get_paginated_response(serializer.data)
Run Code Online (Sandbox Code Playgroud)