2つの異なるモデルを検索する必要があるdjangoプロジェクトがあり、モデルの1つには3つのタイプがあり、それに基づいてフィルタリングする必要があります。私はhaystackをインストールし、基本的な意味で動作しています(モデルにデフォルトのURL confとSearchViewを使用し、入門ドキュメントのテンプレートを使用すると、正常に結果が返されます)。
問題は、基本的なsearch.htmlテンプレートの検索フォームを使用してのみ結果を取得でき、グローバル検索バーをhaystackで機能させようとしているのですが、正しく取得できないようです。干し草の山のドキュメントにはあまり幸運がありません。ここで別の質問を見つけたので、検索アプリで次の方法にたどり着きました。
私のurls.pyは、「/search」を私のsearch.viewsのこのビューに転送します。
def search_posts(request):
post_type = str(request.GET.get('type')).lower()
sqs = SearchQuerySet().all().filter(type=post_type)
view = search_view_factory(
view_class=SearchView,
template='search/search.html',
searchqueryset=sqs,
form_class=HighlightedSearchForm
)
return view(request)
入ってくるURL文字列は次のようになります。
http://example.com/search/?q=test&type=blog
これにより、グローバル検索バーからクエリ文字列が取得されますが、結果は返されません。ただし、sqs行から.filter(type = post_type)部分を削除すると、検索結果が再度取得されます(投稿タイプでフィルタリングされていません)。何か案は?私はかなり明白な何かを見逃していると思いますが、これを理解することはできないようです。
ありがとう、-Sean
編集:
私はただのばかであることがわかりました。タイプによるSQSのフィルタリングで結果が返されない理由は、PostIndexクラスにタイプフィールドが含まれていなかったためです。PostIndexを次のように変更しました。
class PostIndex(indexes.SearchIndex, indexes.Indexable):
...
type = indexes.CharField(model_attr='type')
再構築すると、すべてが機能するようになりました。
返信ありがとうございます!