Restaurant と Dish という 2 つのモデルを持つアプリがあります。皿にはレストランへの外部キーがあります。私は、Haystack を使用して別の検索フォームを作成しようとしています。1 つは Restaurant.name で検索するためのもので、もう 1 つは 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 の提案を試しましたが、まだレストランとディッシュの両方から結果が得られています:
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
また、SearchForm を ModelSearchForm に置き換えてみました。これにより、フォームにレストランと料理のチェックボックスがいくつか表示されますが、チェックされているかどうかに関係なく、検索結果に影響を与えないようです。