python - 如何使用django框架返回分页?

标签 python django python-3.x django-rest-framework

如何使用django框架返回分页?

我正在尝试使用 LimitOffsetPagination 类。

我哪里出错了?

谢谢大家

class Sellers(APIView):
    pagination_class = LimitOffsetPagination

    def get(self, request):

    transactions = Transactions.objects.all()


        page = self.paginate_queryset(transactions, request)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(transactions, many=True)
        return Response(serializer.data)





page = self.paginate_queryset(transactions, request)
AttributeError: 'Sellers' object has no attribute 'paginate_queryset'

最佳答案

我认为 APIView 不支持分页。您需要使用GenericAPIView :

class Sellers(GenericAPIView):
    pagination_class = LimitOffsetPagination

    def get(self, request):
        transactions = Transactions.objects.all()
        page = self.paginate_queryset(transactions)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = YourSerializer(transactions, many=True)
        return Response(serializer.data)

或者更简单地使用 ListAPIView其中 django Rest 框架为您处理一切:

class Sellers(ListAPIView):
    serializer_class = YourSerializer # you need to define a serializer and put it here
    queryset = Transactions.objects.all()

    def dispatch(self, request, *args, **kwargs):
        if request.GET.get('offset', None) and self.request.GET.get('limit', None):
           self._paginator = LimitOffsetPagination
        else:
           self._paginator = PageNumberPagination
        return super(Sellers, self).dispatch(request, *args, **kwargs)

     def get_queryset(self):
         return Transactions.objects.filter(user=self.request.session['user_id'])
 
    # You don't need to override the `.get()` method

关于python - 如何使用django框架返回分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57050000/

相关文章:

Python Regex[Forking] - 根据术语捕获组,但如果遇到集合中的另一个术语则跳过

python - 实现一般反向传播

python - 创建基于散列的排序算法

python - 如何在 Django 中验证电话号码?

Django auth_view 和通用的基于类的 View

database - 为计费系统设计数据库

python - 32 位 bmp 图像未显示在 pygame 屏幕上

python - 使用递归插值计算平滑颜色图

python - 在 Jinja2 If/elif 语句中合并字典元素

python - 如何强制 Django 使用服务名称连接到 Oracle