Отфильтровать результат стога сена с помощью SearchQuerySet

Я использую стог сена с whoosh, пытаясь ограничить результаты поиска записями, созданными только текущим пользователем, вошедшим в систему. Модель категории, для которой я создал индекс, имеет внешний ключ:

user = models.ForeignKey(User, editable=False)

И в моем пользовательском представлении поиска я хочу фильтровать следующим образом:

searchqueryset = SearchQuerySet().filter(user=request.user.id)

form = SearchForm(request.GET, searchqueryset=searchqueryset, load_all=True)

    if form.is_valid():
        query = form.cleaned_data['q']
        results = form.search()

В базе данных есть одна запись для категории таблицы:

id  name    user_id 
1   test10  1   

И текущий идентификатор пользователя действительно равен 1. Но я не получаю результатов.

Когда я делаю это:

searchqueryset = None

Я получаю запись категории "test10". Так кто-нибудь знает, почему фильтр идентификатора пользователя не работает должным образом?


person Robse    schedule 08.09.2011    source источник


Ответы (1)


Вы уверены, что «пользователь» в вашем индексе Haystack содержит целочисленное значение идентификатора пользователя? Возможно, там есть какие-то другие пользовательские данные (например, имя пользователя), поэтому сравнение просто не работает?

По умолчанию пользовательский объект Django возвращает имя пользователя, а не идентификатор пользователя.

person Artis    schedule 08.09.2011
comment
Ой. Я подумал, что поскольку result.object содержит идентификатор записи, который не является полем в моем индексе, все поля должны присутствовать. Судя по всему, это не так. Предполагая, что это потому, что пользователь является FK? В любом случае, после добавления пользователя в мой индекс и изменения набора запросов на (user=request.user) это работает. - person Robse; 09.09.2011