Я использую джанго-стог сена сasticsearch.Я хочу показать спортивные сессии на сайте.На данный момент у меня есть две стороны;спортивно-тренировочный уровень.Оба они представляют собой список флажков и ориентированы на «ИЛИ», что означает, что можно выбрать несколько.
Например, есть 3 варианта обучения с 4 различными тренировками в каждом.Все тренировки по баскетболу для начинающих, а все тренировки по футболу и танцам - для продвинутых.Это может привести к следующему:
Варианты тренировок: Баскетбол (4), Футбол (4), Танцы (4)
Уровни обучения: Начинающий (4), Продвинутый (8))
Если я нажму на баскетбол, отобразится следующий результат:
Баскетбол (3) , Футбол (3) Танцы (3)
Начинающий (3)
В этом случае продвинутый опускается.Хотя я хочу:
Баскетбол (3) , Футбол (3), Танцы (3)
Новичок (3)), Advanced (0)
Я использую следующий код:
from haystack.forms import FacetedSearchForm
class FacetedSearchSportForm(FacetedSearchForm):
def __init__(self, *args, **kwargs):
data = dict(kwargs.get("data", []))
self.sports = data.get('sports', [])
self.level = data.get('level', [])
super().__init__(*args, **kwargs)
def search(self):
sqs = super().search()
if not self.is_valid():
return self.no_query_found()
if self.sports:
query = None
for sport in self.sports:
if query:
query += u' OR '
else:
query = u''
query += u'"%s"' % sqs.query.clean(sport)
sqs = sqs.narrow(u'sports_exact:%s' % query)
if self.level:
query = None
for level in self.level:
if query:
query += u' OR '
else:
query = u''
query += u'"%s"' % sqs.query.clean(level)
sqs = sqs.narrow(u'level_exact:%s' % query)
return sqs
Если я заменю sqs.narrow на sqs.filter, произойдет то же самое.Кто-нибудь знает, как я могу включить счетчик 0 при фильтрации с фасетами?
Спасибо!