Использование результата 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 ответ

Решение

Вы можете сделать одно из следующего:

  1. Добавить отдельный SearchIndex индексация User модель с использованием данных из Profile (и запрос с использованием .models(User))
  2. Добавить сохраненное поле данных в ваш ProfileIndex (Я предполагаю, что это то, что вы назвали это), сохраняя profile "s .user_id, Используйте это в вашем values_list, а также profile__id__in становится id__in,
  3. Ждать load_all поддерживать предварительную выборку связанных данных (вряд ли произойдет в ближайшее время)
  4. Иметь свой Profile наследовать от User, Примечание: я не знаю точно, выполняет ли Django соединение каждый раз, или ленивая загрузка, когда запрашивается родительское поле.
Другие вопросы по тегам