Skip to content

Commit a3c5e65

Browse files
authored
Merge pull request #264 from Aidan79225/feature/support-real-async-paginator
Using apaginate_queryset when the paginator is AsyncPaginationBase
2 parents dc9445b + f0d6a18 commit a3c5e65

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

ninja_extra/pagination/operations.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,22 @@
99

1010
from asgiref.sync import sync_to_async
1111
from django.http import HttpRequest
12-
from ninja.pagination import PaginationBase
12+
from ninja.pagination import AsyncPaginationBase, PaginationBase
1313

1414
from ninja_extra.context import RouteContext
1515
from ninja_extra.shortcuts import add_ninja_contribute_args
1616

1717
if TYPE_CHECKING: # pragma: no cover
1818
from ninja_extra.controllers import ControllerBase
1919

20+
import django
21+
2022

2123
class PaginatorOperation:
2224
def __init__(
2325
self,
2426
*,
25-
paginator: PaginationBase,
27+
paginator: Union[PaginationBase, AsyncPaginationBase],
2628
view_func: Callable,
2729
paginator_kwargs_name: str = "pagination",
2830
) -> None:
@@ -110,8 +112,12 @@ async def as_view(
110112
request = request_or_controller
111113
params = dict(kw)
112114
params["request"] = request
113-
paginate_queryset = cast(
114-
Callable, sync_to_async(self.paginator.paginate_queryset)
115+
is_supported_async_orm = django.VERSION >= (4, 2)
116+
paginate_queryset = (
117+
self.paginator.apaginate_queryset
118+
if isinstance(self.paginator, AsyncPaginationBase)
119+
and is_supported_async_orm
120+
else cast(Callable, sync_to_async(self.paginator.paginate_queryset))
115121
)
116122
return await paginate_queryset(items, **params)
117123

0 commit comments

Comments
 (0)