相关疑难解决方法(0)

Django Rest Framework:在ViewSet上启用分页(如ModelViewSet分页)

我有一个像这样的ViewSet来列出用户的数据:

class Foo(viewsets.ViewSet):

    def list(self, request):
        queryset = User.objects.all()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)

我想打开像ModelViewSet的默认分页一样的分页:

{
    "count": 55,
    "next": "http://myUrl/?page=2",
    "previous": null,
    "results": [{...},{...},...,{...}]
}
Run Code Online (Sandbox Code Playgroud)

官方文件说:

只有在使用通用视图或视图集时,才会自动执行分页

...但我的结果集根本没有分页.我该如何分页呢?

python django django-rest-framework

31
推荐指数
4
解决办法
3万
查看次数

分页在 DRF APIView 中不起作用

我用于APIView获取和发布项目。
我想使用 Django Rest Framework 为我的 API 实现分页,但它不起作用。

我想每页显示 10 个项目,但是当我这样做时api/v1/items?page=1,我会得到所有项目,如果我这样做,api/v1/items我会得到一个空列表。

这是我所做的:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger

class ItemsAPIView(APIView):
    permission_classes = (permissions.IsAuthenticated,)

    def get(self, request, format=None):
        """
        Return a list of all items of this user.
        """
        reply = {}
        page = request.GET.get('page')
        print ('page is', page)
        try:
            products = BaseItem.objects.owned_items().filter(owner=request.user)
            reply['data'] = OwnedItemSerializer(products, many=True).data

            items = BaseItem.objects.filter(owner=request.user)
            paginator = Paginator(items, 1)
            items_with_pagination = paginator.page(page)
            if page is not None:
                reply['data'].extend(ItemSerializer(items_with_pagination, many=True).data)
            reply['data'].extend(ItemSerializer(items, …
Run Code Online (Sandbox Code Playgroud)

python django pagination django-rest-framework

4
推荐指数
1
解决办法
5601
查看次数