Python 基于用户动态筛选Haystack SearchQuerySet

Python 基于用户动态筛选Haystack SearchQuerySet,python,django,django-haystack,Python,Django,Django Haystack,我需要根据当前用户过滤Haystack的SearchQuerySet。我知道我可以通过其他视图中的request.user获取当前用户,所以我想我需要覆盖Haystack的默认搜索视图,但我不确定如何覆盖。下面是我的url.py和views.py的示例 urls.py: urlpatterns = patterns('mysite.search.views', url(r'^mymodel/$', search_view_factory( view_class=MySe

我需要根据当前用户过滤Haystack的SearchQuerySet。我知道我可以通过其他视图中的
request.user
获取当前用户,所以我想我需要覆盖Haystack的默认搜索视图,但我不确定如何覆盖。下面是我的url.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(在URL.py中过滤),但MySearchView中的过滤似乎没有任何作用。有没有其他方法或地方可以让我这样做?

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

索引中有哪些可用字段?您使用的是什么搜索后端我的后端是Solr 4.5.1。我在文本(文档)字段中有几个字段,其他几个字段用于筛选表单。在我的示例中,我试图过滤的“属性”字段也在搜索索引中。谢谢你的帮助。