简体   繁体   English

根据用户动态过滤Haystack SearchQuerySet

[英]Dynamically filter Haystack SearchQuerySet based on the user

I need to filter Haystack's SearchQuerySet based on the current user. 我需要根据当前用户筛选Haystack的SearchQuerySet。 I know I can get the current user via request.user in other views, so I imagine I need to override Haystack's default SearchView, but I'm not sure how. 我知道我可以在其他视图中通过request.user获取当前用户,所以我想我需要覆盖Haystack的默认SearchView,但是我不确定如何。 Below is a sample of my urls.py and views.py. 以下是我的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)

This doesn't seem to be working, though. 但是,这似乎不起作用。 Results are limited to MyModel (as filtered in urls.py), but the filtering in MySearchView doesn't seem to do anything. 结果仅限于MyModel(在urls.py中过滤),但是MySearchView中的过滤似乎没有任何作用。 Is there a different way or place I should be doing this? 我应该采取其他方式或地点吗?

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. 在我自定义的MyModelSearchForm的search()方法中,我将搜索查询集重置为SearchQuerySet().models(MyModel) ,因此它替换了所有以前的过滤。 The method I was attempting with MySearchView works. 我尝试使用MySearchView的方法有效。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM