gpt4 book ai didi

django - 如何在 Django 查询集上获取下一行?

转载 作者:行者123 更新时间:2023-12-04 10:21:16 26 4
gpt4 key购买 nike

我有一个查询集,它将返回其中的几行。其中一行有一个 slug“slug-456”,关于查询集的当前排序,我如何到达具有 slug-456 的行之后的下一行?

我可以遍历查询集并检查当前行是否有 slug“slug-456”,是否注意到下一行是我所追求的,但是有没有更有效的方法?

更新:
我是这样做的:

id_list = list(qs.values_list('id', flat=True))
try:
next_id = id_list[id_list.index(obj.id) + 1]
obj = Object.objects.get(id=next_id)
except IndexError:
pass

最佳答案

查询集是生成器,所以沿着 qs[qs.indexof(slug="..")+1] 行并没有真正的快捷方式。您提出的任何解决方案仍然需要遍历查询集(至少直到目标对象)。

正如您所提到的,一种可能的方法是遍历查询集并在 slug="slug-456"之后立即返回一个。

你当然可以采取更复杂的路线,并按照以下方式做一些事情:

# get slugs in order
sio = list(qs.objects.values_list('slug', flat=True))
target_slug = sio[sio.index(sio) + 1] # watch for KeyError
your_object = qs.objects.get(slug__exact=target_slug)

虽然写起来很有趣,但这不太可能带来任何性能优势(除非您的模型有很多字段,在这种情况下,首先迭代 values_list() 的输出可能是有益的)。

相关答案: Get the index of an element in a queryset

关于django - 如何在 Django 查询集上获取下一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4984761/

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