【问题标题】:How can I know the next value of the Django queryset without having to loop and store values?我如何知道 Django 查询集的下一个值而不必循环和存储值?
【发布时间】:2019-12-06 05:59:20
【问题描述】:

我正在使用 Django 和 Vue.js 编写一个网站。尽管我承认这两者都是初学者,但我发现这令人惊讶,因为我似乎无法事先知道查询集下一项的值。我需要知道在 Django 中是否有办法做到这一点。例如,我在数据库上执行搜索,它返回一个查询集,然后我开始一个接一个地调用查询集的元素。有没有办法提前知道下一个?

   def fetch_question(request):
       question_id = request.GET.get('question_id', None)
       response = Question.objects.filter(pk=question_id)

【问题讨论】:

  • 为什么必须访问查询集中的下一个对象?

标签: json django django-queryset


【解决方案1】:

Django 查询集是可迭代的,因此您可以使用 iter() 函数检索它们的迭代器,然后将 next() 应用于迭代器:

>>> from django.contrib.auth.models import User
>>> qs = User.objects.all()
>>> it = iter(qs)
>>> next(it)
<User: root>
>>> next(it)
<User: toto>
>>> next(it)
<User: titi>
>>> next(it)
<User: tata>
>>> 

请注意,这会消耗迭代器...

另一个解决方案,如果你想迭代 (current,next) 对是使用 zip()(或者它的惰性版本 itertools.izip() 使用 Python2 并拥有大量数据集):

>>> for current, next in zip(qs, qs[1:]):
...     print("current: {} - next : {}".format(current, next))
... 
current: root - next : tata
current: tata - next : titi
current: titi - next : toto

但我不得不说,我真的很想知道为什么你认为你想“事先知道查询集下一项的值”......我真的无法想象这应该解决什么问题。

【讨论】:

  • 谢谢,我想知道能否在我的 JavaScript 框架中使用数据。谢谢你的回答。
  • 请注意,在这里感谢某人回答的通常方式是对答案进行投票(并且 - 如果它解决了您的问题 - 接受它)。
  • 另外:“我试图知道能够在我的 JavaScript 框架中使用数据”并不能解释为什么你认为你需要一种方法来“获取查询集中的下一个项目” ,并且我强烈怀疑这里存在 XY 问题 (en.wikipedia.org/wiki/XY_problem)。
猜你喜欢
  • 1970-01-01
  • 2019-07-02
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2021-10-02
  • 2019-07-14
  • 2014-03-09
  • 2023-04-09
相关资源
最近更新 更多