1

現在のユーザーに基づいて、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 でのフィルター処理は何もしていないようです。これを行うべき別の方法や場所はありますか?

4

1 に答える 1

0

It was my own mistake. In my custom MyModelSearchForm's search() method, I was resetting the search query set to SearchQuerySet().models(MyModel), so it replaced all previous filtering. The method I was attempting with MySearchView works.

于 2013-11-12T16:08:54.977 に答える