問題は、カウントに使用されるクエリが、データのフェッチに使用されるクエリと同じ潜在的に複雑なクエリであるということです。それはかなり無駄です。 PageNumberPagination
Django独自のPaginator
を使用します 内部的に。
カウントのクエリを簡単にするには、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