diff --git a/django_typesense/admin.py b/django_typesense/admin.py index f77d30d..19baeaa 100644 --- a/django_typesense/admin.py +++ b/django_typesense/admin.py @@ -100,12 +100,13 @@ def get_paginator( ) def get_typesense_search_results( - self, - request, - search_term: str, - page_num: int = 1, - filter_by: str = "", - sort_by: str = "", + self, + request, + search_term: str, + page_num: int = 1, + filter_by: str = "", + sort_by: str = "", + list_per_page: int = None ): """ Get the results from typesense with the provided filtering, sorting, pagination and search parameters applied @@ -116,17 +117,20 @@ def get_typesense_search_results( page_num: The requested page number filter_by: The filtering parameters sort_by: The sort parameters + list_per_page: The number of results to return per page Returns: A list of typesense results """ + if list_per_page is None: + list_per_page = self.list_per_page results = typesense_search( collection_name=self.model.collection_class.schema_name, q=search_term or "*", query_by=self.model.collection_class.query_by_fields, page=page_num, - per_page=self.list_per_page, + per_page=list_per_page, filter_by=filter_by, sort_by=sort_by, ) diff --git a/django_typesense/changelist.py b/django_typesense/changelist.py index 3a15862..d3591ca 100644 --- a/django_typesense/changelist.py +++ b/django_typesense/changelist.py @@ -152,7 +152,9 @@ def get_results(self, request): # Get the list of objects to display on this page. if (self.show_all and can_show_all) or not multi_page: - # Reuse values defined in paginator + paginator = self.model_admin.get_paginator( + request, self.results, self.list_max_show_all + ) result_list = paginator.results else: try: @@ -396,6 +398,7 @@ def get_typesense_results(self, request): self.page_num, filter_by=filter_by, sort_by=sort_by, + list_per_page=self.list_max_show_all # so that if we have all the data if we need to show all ) # Set query string for clearing all filters. diff --git a/django_typesense/paginator.py b/django_typesense/paginator.py index 87b83a8..a41df6e 100644 --- a/django_typesense/paginator.py +++ b/django_typesense/paginator.py @@ -49,7 +49,12 @@ def prepare_results(self): def page(self, number): """Return a Page object for the given 1-based page number.""" - return self._get_page(self.results, number, self) + number = self.validate_number(number) + bottom = (number - 1) * self.per_page + top = bottom + self.per_page + if top + self.orphans >= self.count: + top = self.count + return self._get_page(self.results[bottom:top], number, self) @cached_property def count(self):