如何使用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/