diff --git a/wagtail/api/v2/pagination.py b/wagtail/api/v2/pagination.py index 089d995472..8dfd3b573e 100644 --- a/wagtail/api/v2/pagination.py +++ b/wagtail/api/v2/pagination.py @@ -3,12 +3,9 @@ from __future__ import absolute_import, unicode_literals from collections import OrderedDict from django.conf import settings -from django.db.models.query import QuerySet from rest_framework.pagination import BasePagination from rest_framework.response import Response -from wagtail.wagtailsearch.backends.base import BaseSearchResults - from .utils import BadRequestError @@ -36,7 +33,7 @@ class WagtailPagination(BasePagination): stop = offset + limit self.view = view - self.total_count = queryset.count() if isinstance(queryset, (BaseSearchResults, QuerySet)) else len(queryset) + self.total_count = queryset.count() return queryset[start:stop] def get_paginated_response(self, data): diff --git a/wagtail/contrib/wagtailapi/pagination.py b/wagtail/contrib/wagtailapi/pagination.py index 4182a3f98c..d30e61e044 100644 --- a/wagtail/contrib/wagtailapi/pagination.py +++ b/wagtail/contrib/wagtailapi/pagination.py @@ -3,12 +3,9 @@ from __future__ import absolute_import, unicode_literals from collections import OrderedDict from django.conf import settings -from django.db.models.query import QuerySet from rest_framework.pagination import BasePagination from rest_framework.response import Response -from wagtail.wagtailsearch.backends.base import BaseSearchResults - from .utils import BadRequestError @@ -36,7 +33,7 @@ class WagtailPagination(BasePagination): stop = offset + limit self.view = view - self.total_count = queryset.count() if isinstance(queryset, (BaseSearchResults, QuerySet)) else len(queryset) + self.total_count = queryset.count() return queryset[start:stop] def get_paginated_response(self, data): diff --git a/wagtail/wagtailsearch/backends/base.py b/wagtail/wagtailsearch/backends/base.py index a9abca8826..a03747bd30 100644 --- a/wagtail/wagtailsearch/backends/base.py +++ b/wagtail/wagtailsearch/backends/base.py @@ -186,6 +186,20 @@ class BaseSearchResults(object): return clone +class EmptySearchResults(BaseSearchResults): + def __init__(self): + return super(EmptySearchResults, self).__init__(None, None) + + def _clone(self): + return self.__class__() + + def _do_search(self): + return [] + + def _do_count(self): + return 0 + + class BaseSearchBackend(object): query_class = None results_class = None @@ -230,11 +244,11 @@ class BaseSearchBackend(object): # Model must be a class that is in the index if not class_is_indexed(model): - return [] + return EmptySearchResults() # Check that theres still a query string after the clean up if query_string == "": - return [] + return EmptySearchResults() # Only fields that are indexed as a SearchField can be passed in fields if fields: