0

我正在使用 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(...)

你知道更好的方法吗?

感谢您的帮助,马蒂亚斯

4

1 回答 1

2

您可以执行以下操作之一:

  1. 使用来自(并使用查询)的数据添加单独SearchIndex的模型索引UserProfile.models(User)
  2. 存储的数据字段添加到您的ProfileIndex(我假设这是您命名的),存储profile's .user_id. 在你的 , 中使用它values_list,然后profile__id__in变成id__in.
  3. 等待load_all支持预取相关数据(不太可能很快发生)
  4. 让你Profile 继承User. 注意:我不确定 Django 是每次都加入,还是在请求父字段后延迟加载。
于 2014-04-10T07:42:24.960 回答