我需要根据当前用户过滤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中的过滤似乎没有做任何事情。我应该采取不同的方式或地点吗?
答案 0 :(得分:0)
这是我自己的错误。在我的自定义MyModelSearchForm的search()
方法中,我将搜索查询集重置为SearchQuerySet().models(MyModel)
,因此它取代了之前的所有过滤。我试用MySearchView
的方法有效。