【发布时间】:2013-08-10 00:08:17
【问题描述】:
我有一个包含两个模型的应用,Restaurant 和 Dish。 Dish 有一个指向 Restaurant 的外键。我正在尝试使用 Haystack 构建单独的搜索表单,一个供人们按 Restaurant.name 搜索,另一个按 Dish.name 搜索。
我无法将其分离出来并理解 Haystack 是如何做到这一点的。由于我在下面创建了两个索引,当我有一个 SearchForm 时,如果我在搜索框中输入“虾”,它将返回“烤虾”,如果我输入“ShakeShack”,结果将返回“ShakeShack”。我的目标是创建一个餐厅搜索表单,如果您在其中输入“虾”,您不应该得到任何结果,因为没有名称中包含“虾”的餐厅。但现在我的表单似乎允许搜索这两个模型。
我的指数:
class RestaurantIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
return Restaurant
class DishIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
def get_model(self):
return Dish
我的搜索表单:
class MySearchForm(SearchForm):
def search(self):
sqs = super(MySearchForm, self).search()
if not self.is_valid():
return self.no_query_found()
return sqs
我尝试插入 sqs.models(Restaurant) 以限制仅搜索/返回 Restaurant 模型的结果,但它不起作用。我也试过把它放在 url conf 中:
SearchView(searchqueryset=SearchQuerySet().models(Restaurant)
任何帮助将不胜感激!
谢谢! 阴
更新: 我尝试了 Hedde 的建议,但仍然从 Restaurant 和 Dish 获得结果:
class CitySearchForm(SearchForm):
models = [Restaurant]
def get_models(self):
return self.models
def search(self):
# First, store the SearchQuerySet received from other processing.
sqs = super(CitySearchForm, self).search().models(Restaurant)
if not self.is_valid():
return self.no_query_found()
return sqs
还尝试将 ModelSearchForm 替换为 SearchForm,这在我的表单中为餐厅和菜肴提供了几个复选框,但无论是否选中,它们似乎都不会影响搜索结果。
【问题讨论】: