
[英]django haystack Whoosh - SearchQuerySet().models(ModelName) not narrowing results
[英]Selecting models to use with SearchQuerySet
我有一些代码包含如下搜索功能:
def searchHay(request):
content = sorted(request.GET.getlist('content', ''))
sqs = SearchQuerySet().facet('this').facet('that').facet('the_other')
# This if/else block is perhaps not a very good solution...
if "things" in content and "stuff" in content:
sqs = sqs.models(Things, Stuff)
elif "things" in content:
sqs = sqs.models(Things)
elif "stuff" in content:
sqs = sqs.models(Stuff)
sqs = sqs.order_by('sort_field')
view = search_view_factory(
view_class=FacetedSearchView,
template='search/search.html',
searchqueryset=sqs,
form_class=AllFacetedSearchForm
)
return view(request)
如您所见,将根据用户提交表单时选择的某些选项来搜索不同的模型,这些选项在此处作为“内容”传递。 这可行,但是随着模型数量的增加变得非常麻烦。 如果有人对采用更优雅的方法有任何建议,那么我很想知道它们是什么。
一种简单的解决方案可能是使用“ 独立的ifs ”,而不是:
# This if/else block is perhaps not a very good solution...
if "things" in content and "stuff" in content:
sqs = sqs.models(Things, Stuff)
elif "things" in content:
sqs = sqs.models(Things)
elif "stuff" in content:
sqs = sqs.models(Stuff)
你可以有:
if "things" in content:
sqs = sqs.models(Things)
if "stuff" in content:
sqs = sqs.models(Stuff)
有了这个,你不需要管理“多项选择”,如果有things
和stuff
在内容上,它会自动添加两个过滤器。 而且,如果将来需要添加更多模型,则只需为每个模型添加一个即可。
我认为如果您执行sqs = sqs.models(Things)
,然后执行sqs = sqs.models(Stuff)
,结果将为0或为空,但是...
我在控制台上对其进行了测试,以确保感到惊讶。
sqs = sqs.models(Things)
sqs.count()
<-此返回值可以说是100 sqs = sqs.models(Stuff)
sqs.count()
<- 这将返回100 + Stuff模型的对象 因此,您可以具有独立的ifs,并且它将按您的预期工作,因为似乎您可以这样做:
sqs = sqs.models(Things)
sqs = sqs.models(Stuff)
将与sqs.models(Things, Stuff)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.