我正在使用django haystack和elasticsearch。我想在网站上展示运动会。现在我有两个方面;运动训练水平。它们都是复选框列表,并且都是“或”方向的,这意味着可以选择多个
例如,有3个培训选项,每个选项有4种不同的培训。所有的篮球训练都是初学者的,所有的足球和舞蹈训练都是高级的。这将导致以下情况:
Training options: Basketball (4), Football (4), Dancing (4)
Training levels: Beginner (4), Advanced (8)
如果单击basketball,将显示以下结果:
Basketball (3), Football (3), Dancing (3)
Beginner (3)
在这种情况下,高级选项被省略了。我想要的是:
Basketball (3), Football (3), Dancing (3)
Beginner (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.filter替换sqs.narrow,同样的情况也会发生。有人知道我如何在过滤facet时包含0的计数吗
谢谢
目前没有回答
相关问题 更多 >
编程相关推荐