过滤Django Haystack的结果如QuerySet?

nik*_*ola 10 django django-queryset django-haystack

是否可以将Django Haystack搜索与"内置"QuerySet过滤操作相结合,特别是使用Q()实例和SearchQuerySet不支持的查找类型进行过滤?无论是哪种顺序:

haystack-searched -> queryset-filtered
Run Code Online (Sandbox Code Playgroud)

要么

queryset-filtered -> haystack-searched
Run Code Online (Sandbox Code Playgroud)

浏览Django Haystack文档没有给出任何指示如何执行此操作.

小智 10

您可以使用对象的PK基于Haystack搜索的结果过滤您的查询集:

def view(request):
  if request.GET.get('q'):
    from haystack import ModelSearchForm
    form = ModelSearchForm(request.GET, searchqueryset=None, load_all=True)
    searchqueryset = form.search()
    results = [ r.pk for r in searchqueryset ]

    docs = Document.objects.filter(pk__in=results)
    # do something with your plain old regular queryset

    return render_to_response('results.html', {'documents': docs});
Run Code Online (Sandbox Code Playgroud)

不确定这是如何扩展的,但对于小的结果集(在我的情况下为几百),这很好用.

  • 有了这个,您的结果将按ID排序,您将失去针对性. (6认同)
  • 这不规模.我假设查询得太长 - 有几千个ID会有0个结果. (5认同)