我的第一个视图集:
class BienAll(generics.ListAPIView):
queryset = FacebookBien.objects.all()
pagination_class = SmallPagesPagination
def get(self, request, *args, **kwargs):
serializer = FacebookBienSerializer(self.queryset.all(), many=True)
page = self.paginate_queryset(serializer.data)
return self.get_paginated_response(page)
我的第二个视图集:
class Test(generics.ListAPIView):
queryset = FacebookBien.objects.all()
pagination_class = SmallPagesPagination
serializer_class = FacebookBienSerializer
我的第二个视图集是即时的,但我的第一个是缓慢的,我不明白为什么。
2条答案
按热度按时间hjqgdpho1#
我猜这是分页发生的顺序。
在第一个例子中,你序列化所有的数据,然后再次访问它来分页它的一个子集。我希望DRF足够聪明,在获取所有项之前分页。
如果您希望得到类似的结果,可以在序列化查询集之前,根据分页器返回的条目数对查询集进行切片--但是只使用第二个版本要好得多。
b5buobof2#
根据该参考文献:https://docs.djangoproject.com/en/3.2/ref/models/querysets/#django.db.models.query.QuerySet.prefetch_related
如果FacebookBien有一个ManyToMany列,则可以使用此prefetch_related