在Django ORM中使用Haystack结果

时间:2013-12-13 17:07:46

标签: django orm django-haystack searchqueryset

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

你知道更好的方法吗?

感谢您的帮助, 的Matthias

1 个答案:

答案 0 :(得分:2)

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

  1. 使用SearchIndex中的数据(并使用User查询)
  2. Profile模型添加单独的.models(User)索引
  3. ProfileIndex添加stored data field(我假设你的名字是这样的),存储profile' s {{1 }}。在.user_id中使用它,values_list变为profile__id__in
  4. 等待load_all支持预取相关数据(不太可能很快发生)
  5. id__in获取Profile inherit。注意:我不确定Django每次都进行连接,或者一旦请求父字段就进行延迟加载。