0

为什么查询重复?,有什么我没有注意到的吗?

有什么办法可以优化吗?

分页

class MyPageNumberPagination(PageNumberPagination):
    page_size = 2
    page_size_query_param = 'size'
    max_page_size = 4

    def get_paginated_response(self, data):
        return Response({
            'page': self.page.number,
            'total_pages': self.page.paginator.num_pages,
            'count': self.page.paginator.count,
            'data': data
        })

在此处输入图像描述

视图 不要使用分页。

class DevicesView(ModelViewSet):
    serializer_class = DeviceSerializer
    queryset = DeviceModel.objects.all()

    def list(self, request, *args, **kwargs):
        queryset = DeviceModel.objects.filter(owner_id__owner__id=request.user.pk)
        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

视图使用分页。

在此处输入图像描述

class DevicesView(ModelViewSet):
    serializer_class = DeviceSerializer
    queryset = DeviceModel.objects.all()
    pagination_class = MyPageNumberPagination

    def list(self, request, *args, **kwargs):
        queryset = DeviceModel.objects.filter(owner_id__owner__id=request.user.pk)
        page = self.paginate_queryset(queryset)
        serializer = self.get_serializer(page, many=True)
        return self.get_paginated_response(serializer.data)
4

1 回答 1

0

您正在访问queryset两次。一个分页,一个仅用于序列化程序:

page = self.paginate_queryset(queryset) # <---- Hits DB
serializer = self.get_serializer(queryset, many=True) # <---- Hits DB again

您应该将页面传递给您的序列化程序:

serializer = self.get_serializer(page, many=True)
于 2021-10-25T07:37:59.770 回答