def page(self, number, per_page): if not number: if not self._request: raise Exception('Requires with_request') number = self.get_page_from_request(self._request) if self._group_by and not self._count: qset = deepcopy(self.queryset).values(*self._group_by) if self._distinct: qset = qset.distinct() self._count = qset.count() per_page = per_page or self.PER_PAGE paginator = Paginator(self.instance.rows, per_page) if self._count: hits = max(1, self._count - paginator.orphans) paginator._num_pages = int(ceil(hits / float(per_page))) # The following line also avoids an extra (and wrong) COUNT(*) query. paginator._count = self._count try: current_page = paginator.page(number) except (EmptyPage, InvalidPage): page_number = 1 current_page = paginator.page(page_number) paginator.limited_page_range = CustomPaginator.get_page_range(paginator.num_pages, number) return current_page