Мне нужно отфильтровать 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, похоже, ничего не делает. Есть ли другой способ или место, которое я должен делать?
Каковы доступные поля в вашем индексе? и какие поисковые серверы вы используете –
Мой бэкэнд - Solr 4.5.1. У меня есть пара полей в поле text (document) и несколько других для фильтрации через форму. Поле «свойство», которое я пытаюсь фильтровать в моем примере, также находится в индексе поиска. – Goluxas
Я понял, что сделал глупую ошибку, подробно описанную ниже. Спасибо за попытку помочь. – Goluxas