根据用户动态过滤Haystack SearchQuerySet

时间:2013-11-11 21:07:54

标签: python django django-haystack

我需要根据当前用户过滤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)

但这似乎不起作用。结果仅限于MyModel(在urls.py中过滤),但MySearchView中的过滤似乎没有做任何事情。我应该采取不同的方式或地点吗?

1 个答案:

答案 0 :(得分:0)

这是我自己的错误。在我的自定义MyModelSearchForm的search()方法中,我将搜索查询集重置为SearchQuerySet().models(MyModel),因此它取代了之前的所有过滤。我试用MySearchView的方法有效。