【问题标题】:Using django haystack search with global search bar in template在模板中使用带有全局搜索栏的 django haystack 搜索
【发布时间】:2013-03-19 04:30:48
【问题描述】:

我有一个 django 项目,需要搜索 2 个不同的模型,其中一个模型有 3 种类型,我需要根据这些类型进行过滤。我已经安装了 haystack 并在基本意义上工作(使用我的模型的默认 url conf 和 SearchView 以及入门文档中的模板返回结果很好)。

问题是我只能通过使用基本 search.html 模板中的搜索表单来获取结果,并且我正在尝试使全局搜索栏与 haystack 一起使用,但我似乎无法得到它是的,我对 haystack 文档的运气并不好。我在这里发现了另一个问题,导致我在搜索应用中采用了以下方法。

我的 urls.py 将“/search”定向到我的 search.views 中的这个视图:

def search_posts(request):
    post_type = str(request.GET.get('type')).lower()
    sqs = SearchQuerySet().all().filter(type=post_type)
    view = search_view_factory(
        view_class=SearchView,
        template='search/search.html',
        searchqueryset=sqs,
        form_class=HighlightedSearchForm
        )
    return view(request)

传入的url字符串看起来像:

http://example.com/search/?q=test&type=blog

这将从我的全局搜索栏中获取查询字符串,但不返回任何结果,但是如果我从 sqs 行中删除 .filter(type=post_type) 部分,我将再次获得搜索结果(尽管未按帖子类型过滤) .有任何想法吗?我想我遗漏了一些相当明显的东西,但我似乎无法弄清楚。

谢谢, -肖恩

编辑:

原来我只是个白痴。我按类型对 SQS 进行过滤没有返回任何结果的原因是因为我的 PostIndex 类中没有包含 type 字段。我将我的 PostIndex 更改为:

class PostIndex(indexes.SearchIndex, indexes.Indexable):
      ...
      type = indexes.CharField(model_attr='type')

然后重建,现在一切正常。

感谢您的回复!

【问题讨论】:

    标签: django search django-haystack


    【解决方案1】:
    def search_posts(request):
        post_type = str(request.GET.get('type')).lower()
        sqs = SearchQuerySet().filter(type=post_type)
        clean_query = sqs.query.clean(post_type)
        result = sqs.filter(content=clean_query)
        view = search_view_factory(
            view_class=SearchView,
            template='search/search.html',
            searchqueryset=result,
            form_class=HighlightedSearchForm
            )
        return view(request)
    

    【讨论】:

      猜你喜欢
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多