我有一个包含两个模型的应用程序,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)
以限制仅来自餐厅模型的搜索/返回结果,但它不起作用。我也试过把它放在 url conf 中:
SearchView(searchqueryset=SearchQuerySet().models(Restaurant)
任何帮助,将不胜感激!
谢谢!阴
更新:我尝试了 Hedde 的建议,但仍然从餐厅和菜肴中得到结果:
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,这在我的表单中为 Restaurant 和 Dish 提供了几个复选框,但无论是否选中它们似乎都不会影响搜索结果。