gpt4 book ai didi

Django haystack SearchQuerySet 到 QuerySet

转载 作者:行者123 更新时间:2023-12-02 07:14:42 25 4
gpt4 key购买 nike

我有一个非常通用的 View /模板来显示给定模型的查询集的内容。
我在 12 个地方使用了 12 个不同的查询集,现在我想将 haystack 搜索集成到那里,但我不能,因为 SearchQuerySet 与模板中的 QuerySet 不匹配。

使用普通查询集我会这样做

{%for obj in qs%}
{{obj.foreign_key.name }}
{%endfor%}

使用 SearchQuerySet 我需要做

{%for obj in qs%} 
{{obj.object.foreign_key.name}}
{%endfor%}

这基本上破坏了我现在知道查询集来自哪里的通用模板和 View 。

我想要一种让搜索查询集表现得像普通查询集一样的方法,我知道:

  • 尽管我会保住顺序,但我会失去分数
  • 我需要执行 load_all() 来获取整个对象

有关如何保持模板通用但接受 SearchQuerySet 或将 SearchQuerySet 转换为 QuerySet 的任何提示吗?

最佳答案

我使用了一个巧妙的生成器技巧,可以避免向模型添加 object 方法,并允许您对 Django 的 QuerySet 和 Haystack 使用相同的模板>SearchQuerySet

诀窍是将 SearchQuerySet 包装到生成器中。

# In your view...

def queryset_gen(search_qs):
for item in search_qs:
yield item.object # This is the line that gets the model instance out of the Search object

qs = queryset_gen(sqs)

这种方法的优点是它保持了 SearchQuerySet 返回的顺序,并节省了计算和内存,因为您不需要创建或存储列表的另一个实例。

关于Django haystack SearchQuerySet 到 QuerySet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com