2013-11-11 1 views
0

Мне нужно отфильтровать SearchQuerySet Haystack на основе текущего пользователя. Я знаю, что могу получить текущего пользователя через request.user в других представлениях, поэтому я предполагаю, что мне нужно переопределить SearchStа по умолчанию Haystack, но я не знаю, как это сделать. Ниже приведен пример моих urls.py и views.py.Динамический фильтр Haystack SearchQuerySet на основе пользователя

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

Мой бэкэнд - Solr 4.5.1. У меня есть пара полей в поле text (document) и несколько других для фильтрации через форму. Поле «свойство», которое я пытаюсь фильтровать в моем примере, также находится в индексе поиска. – Goluxas

+0

Я понял, что сделал глупую ошибку, подробно описанную ниже. Спасибо за попытку помочь. – Goluxas

ответ

0

Это была моя собственная ошибка. В моем обычном методе MyModelSearchForm search() я сбросил поисковый запрос на SearchQuerySet().models(MyModel), поэтому он заменил всю предыдущую фильтрацию. Метод, который я пытался с помощью MySearchView работ.