Я только что сделал это, и это на самом деле вполне достижимо без повторного запуска исходного поискового запроса.вам просто нужно использовать сеанс для хранения оригинальных фасетов.
Вот мой действительный рабочий код:
from haystack.views import FacetedSearchView
class StickyFacetedSearchView (FacetedSearchView):
def top_level_facets(self):
"""
When selecting a facet to drill down the results,
we need to keep the top level facet counts
"""
stored_query = self.request.session.get('query', None)
if stored_query != self.query:
self.request.session['query'] = self.query
self.request.session['facet_counts'] = self.results.facet_counts()
return self.request.session['facet_counts'] # Fail loudly
def extra_context(self):
""" add base_facets to extra_context"""
extra = super(StickyFacetedSearchView, self).extra_context()
extra['base_facets'] = self.top_level_facets()
return extra
Вставьте приведенный выше вид в приложение под названием «mysearch» или аналогичное, а затем используйте mysearch.StickyFacetedSearchView в urls.py вместо FacetedSearchView.
Чтобы получить к ним доступ, используйте base_facets в шаблоне, а не facets.
Он отлично работает.