Использование результата Haystack в Django ORM
Я фильтрую профили пользователей по их интересам, используя Haystack. Как я могу использовать результат Haystack, чтобы запросить модель, чтобы вернуть мне всех выбранных пользователей, принадлежащих к этим профилям пользователей?
Сейчас я делаю это следующим образом, но это очень медленно, так как haystack_results может быть списком из многих тысяч записей:
haystack_results = SearchQuerySet().raw_search('coffee AND django_ct:common.profile').values_list('pk', flat=True)
User.objects.filter(profile__id__in=haystack_results)
Пользователь и профиль имеют отношения OneToOne:
class Profile(models.Model):
user = models.OneToOneField(...)
Вы знаете какой-нибудь лучший способ?
Спасибо за помощь, Матиас
1 ответ
Решение
Вы можете сделать одно из следующего:
- Добавить отдельный
SearchIndex
индексацияUser
модель с использованием данных изProfile
(и запрос с использованием.models(User)
) - Добавить сохраненное поле данных в ваш
ProfileIndex
(Я предполагаю, что это то, что вы назвали это), сохраняяprofile
"s.user_id
, Используйте это в вашемvalues_list
, а такжеprofile__id__in
становитсяid__in
, - Ждать
load_all
поддерживать предварительную выборку связанных данных (вряд ли произойдет в ближайшее время) - Иметь свой
Profile
наследовать отUser
, Примечание: я не знаю точно, выполняет ли Django соединение каждый раз, или ленивая загрузка, когда запрашивается родительское поле.