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)

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

4

1 回答 1

0

这是我自己的错误。在我的自定义 MyModelSearchFormsearch()方法中,我将搜索查询设置为SearchQuerySet().models(MyModel),因此它替换了所有以前的过滤。我尝试使用的方法MySearchView有效。

于 2013-11-12T16:08:54.977 回答