現在のユーザーに基づいて、Haystack の SearchQuerySet をフィルタリングする必要があります。他のビューで現在のユーザーを取得できることはわかっているrequest.user
ので、Haystack のデフォルトの SearchView をオーバーライドする必要があると思いますが、その方法がわかりません。以下は私のurls.pyとviews.pyのサンプルです。
urls.py:
urlpatterns = patterns('mysite.search.views',
url(r'^mymodel/$', search_view_factory(
view_class=MySearchView,
template='mymodel_search.html',
form_class=MyModelSearchForm,
searchqueryset = SearchQuerySet().models(MyModel),
), name='mymodel_search'),
...
views.py:
class MySearchView(SearchView):
def build_form(self, form_kwargs=None):
prop = UserProfile.objects.get(user = self.request.user).property
self.searchqueryset = self.searchqueryset.filter(property = prop)
return super(MySearchView, self).build_form(form_kwargs)
ただし、これは機能していないようです。結果は (urls.py でフィルター処理されたように) MyModel に限定されますが、MySearchView でのフィルター処理は何もしていないようです。これを行うべき別の方法や場所はありますか?