我正在使用 haystack 对我的项目进行完整的站点搜索,该项目在书籍、作者、事件和视频模型中进行搜索。
然后我有主要的书籍页面,我只想针对 Books 模型进行搜索。
我找到了这篇文章: 如何在 Haystack 中只返回特定类型的索引对象
但是,它似乎对我不起作用。我正在使用简单的后端进行本地测试,我知道确实存在一些问题,但我不确定这是否相关。
我的 search_indexes.py 文件如下所示:
class BookSearchIndex (SearchIndex):
text = CharField(document=True, use_template=True)
title_web = CharField(model_attr='title_web', boost=1.125)
on_sale_date = CharField(model_attr='on_sale_date')
def index_queryset(self):
return Book.objects.active().filter(publish_level='published')
site.register(Book, BookSearchIndex)
在我看来,如果通过了搜索查询,则仅返回带有该查询的书籍,否则显示所有书籍:
search = self.request.GET.get('search', None)
if search:
clean_query = SearchQuerySet().query.clean(search)
sqs = SearchQuerySet().models(Book).filter(content=clean_query).order_by('-on_sale_date')
else:
sqs = SearchQuerySet().models(Book).order_by('-on_sale_date)
搜索会根据搜索查询正确过滤项目,但仍会返回所有模型。它不仅限于 Book 模型。
这部分似乎没有效果:
SearchQuerySet().models(Book)
谁能帮我弄清楚我做错了什么?