DRF - разбивка сериализатора на страницы без модели - PullRequest
0 голосов
/ 11 июля 2020

Я написал следующий код:

class RateViewSet(viewsets.ViewSet):
    serializer_class = RateSerializer
    permission_classes = [permissions.IsAuthenticated]

    def per_league(self, request):
        league_id = request.query_params.get('league')
        
        if(league_id):
            rates = []
            for market in Market.objects.all():
                total = len(Prediction.objects.filter(market=market, fixture__league__id=league_id).all().exclude(status='Win'))
                hits = 0
                if(total):
                    hits = round(len(Prediction.objects.filter(market=market, fixture__league__id=league_id, status="Win").all()) / len(Prediction.objects.filter(market=market, fixture__league__id=league_id).all().exclude(status='Win')), 2)
                
                rates.append({'market': market, 'rate': hits})
            
            page = self.paginate_queryset(rates)
            if page is not None:
                serializer = self.get_serializer(page, many=True)
                return self.get_paginated_response(serializer.data)

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

        return HttpResponseServerError

class RateSerializer(serializers.Serializer):
    market = MarketSerializer(read_only=True, many=False)
    rate = serializers.DecimalField(max_digits=4, decimal_places=2)

Когда я отправляю запрос на эту конечную точку, я получаю в ответ следующее: "'RateViewSet' object has no attribute 'paginate_queryset'" что имеет смысл, но я не могу понять, как я могу разбейте результат на страницы, если к сериализатору не прикреплена модель. У меня есть следующий пользовательский класс разбивки на страницы:

class PaginationSerializer(pagination.PageNumberPagination):
    page_size_query_param = 'page_size'    
    def get_paginated_response(self, data):
        return Response({
            'next': self.get_next_link(),
            'previous': self.get_previous_link(),
            'count': self.page.paginator.count,
            'pages': self.page.paginator.num_pages,
            "page_size": settings.REST_FRAMEWORK["PAGE_SIZE"],
            'results': data
        })

Кто может мне с этим помочь?

...