【问题标题】:How to get n search objects from a SearchQuerySet without changing the type?如何在不更改类型的情况下从 SearchQuerySet 中获取 n 个搜索对象?
【发布时间】:2015-12-12 12:58:39
【问题描述】:

我正在尝试获取 10 个对象,例如:

q_auth = SearchQuerySet().filter(content=validate_query)
q_auth = q_auth[:10]
print type(q_auth)

我想要的输出是:<class 'haystack.query.SearchQuerySet'>,但我得到的是<type 'list'>

有人可以帮帮我吗?

【问题讨论】:

  • 您为什么希望类型是SearchQuerySet?毕竟是一个列表
  • @RohitJain 嗯.. 我可以看到 OP 来自哪里:the docs 说它仍然是一个查询集
  • @Pynchia 嗯,我明白了。
  • 显然没有人能重现这种情况。您能否提供更多有关该问题的背景信息?
  • @RohitJain 我想要 作为输出。

标签: python django elasticsearch django-haystack searchqueryset


【解决方案1】:

我尝试了类似你的代码的东西,但得到了这样的输出:

<class 'django.db.models.query.QuerySet'>

根据您所拥有的,我认为您可以尝试以下方法:

print type(q_auth[0])

【讨论】:

  • 我也是,我无法复制&lt;type 'list'&gt;
  • 你也可以迭代,对我来说,一种更 Pythonic 的方式:_q_auth = iter(q_auth); next(_q_auth)
【解决方案2】:

查看source,您会看到q_auth[:10] 返回结果列表。 SearchQuerySet 是惰性的,并且在您使用切片检索它们之前可能没有所有结果,即q_auth[:10]

只要做:

first_results = q_auth[:10]   

并通过以下方式访问结果:

first_results[0]

我建议不要这样做:

q_auth = q_auth[:10]

因为您的实例 q_authSearchQuerySet 以后将无法用于检索更多结果。

【讨论】:

  • 它正在转换类型。我希望类型为&lt;class 'haystack.query.SearchQuerySet'&gt;,但它给了我一个列表
  • q_auth 已经属于这种类型。切片返回一个列表。这就是它的实现方式。实际上,这很有意义。请尝试我的答案中的代码。为切片结果使用不同的名称,q_auth 保留其类型。
  • 我尝试了您答案中的代码,但它改变了类型。所以我更改了我的代码以使用列表而不是搜索对象。
  • 很高兴听到。如果此答案有助于解决问题,请考虑接受。
  • 对不起,但这并没有太大帮助,因为它正在改变类型,我不得不重写我的代码以获取列表
猜你喜欢
  • 1970-01-01
  • 2014-06-09
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多