首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SearchQuerySet().models(ModelName)不缩小结果

SearchQuerySet().models(ModelName)不缩小结果
EN

Stack Overflow用户
提问于 2013-10-21 17:19:10
回答 2查看 1K关注 0票数 2

我有3个模型,有3个索引(Modelname1Index,ModelName2Index,Modelname3Index)在search_indexes.py中。

SearchQuerySet().filter是从这三者中搜索出来的,但我想将它们分别搜索。

所以,我试过这样做:

代码语言:javascript
复制
SearchQuerySet().filter(text=query).models(required_model_name)

但是,它是从整个搜索(从所有模型)返回结果,而不是从提到的单个模型。

此外,在进行重建索引时,为第三个模型建立索引的no对象,因为该模型没有任何行。

因此,.models(第三个模型)返回的是空结果,而.models(其他两个模型中的任何一个)返回整个结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-21 18:48:10

不幸的是,.models()过滤器不能正确地处理最新版本的Haystack和Whoosh。

您可以通过将Hay堆栈降级到2.0.0和Whoosh降低到2.4.1来解决这个问题。

还请注意,在您的配置中尝试使用HAYSTACK_SEARCH_RESULTS_PER_PAGE时,您将得到一个bug,所以您最好避免这个设置。

不过,这也不算太可怕。

票数 3
EN

Stack Overflow用户

发布于 2014-11-26 08:13:35

This is based partlyon James Lims answer,但是这应该适用于任何版本的Haystack和Whoosh。不幸的是,双方都没有真正拯救这一点,但下面的解决方案似乎并不是太糟糕。

代码语言:javascript
复制
class MySearchQuerySet(SearchQuerySet):
    def models(self,*mods):
        # We have to redefine this because Whoosh & Haystack don't play well with model filtering
        from haystack.utils import get_model_ct
        mods = [get_model_ct(m) for m in mods]
        return self.filter(django_ct__in=mods)

那么,在任何时候SearchQuerySet使用MySearchQuerySet的地方:

代码语言:javascript
复制
MySearchQuery().filter(name="foo").models(my_models.bar,my_models.baz)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19500830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档