Как включить фасеты с числом 0 в facet_counts () с django-haystack при сужении или фильтрации? - PullRequest
0 голосов
/ 23 сентября 2018

Я использую джанго-стог сена с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 при фильтрации с фасетами?

Спасибо!

...