PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Décompte extrêmement lent de la pagination de Django Rest Framework

Le problème est que la requête utilisée pour compter est la même, potentiellement complexe, que celle utilisée pour récupérer les données. C'est plutôt du gaspillage. PageNumberPagination utilise le propre Paginator de Django en interne.

Pour simplifier la requête de comptage, remplacez la classe de paginateur utilisée par DRF :

from django.core.paginator import Paginator
from django.utils.functional import cached_property
from rest_framework.pagination import PageNumberPagination

class FasterDjangoPaginator(Paginator):
    @cached_property
    def count(self):
        # only select 'id' for counting, much cheaper
        return self.object_list.values('id').count()


class FasterPageNumberPagination(PageNumberPagination):
    django_paginator_class = FasterDjangoPaginator