gpt4 book ai didi

python - Django 查询给定位置的有序对象

转载 作者:太空宇宙 更新时间:2023-11-04 05:32:29 25 4
gpt4 key购买 nike

我有一个接受对象 id 的函数。有了这个 id,我可以获取表的对象 object_1 = Object.objects.get(pk=id)。我想让 Object 表按名为 votes 的位置排序。例如,objects = Object.objects.order_by('-votes') 我想找到 object_1objects 中的位置.

我怎样才能做到这一点?据我所知,查询集不是一个列表,我必须遍历所有元素,当我在表中有很多条目时,这将是一个很大的性能问题。

这一切的目的是为了展示一个按票数排序的排名,其中我只展示了6个条目,第4个应该是对象之一。例如,如果我搜索对象 1,我应该显示:

Position | Name | Votes
5 obj5 52
6 obj3 49
7 obj10 49
8 obj1 47
9 obj15 15
10 obj6 14

因此,我想按此顺序使用 obj5,obj3,obj10,obj1,obj15,obj6 获取查询集。最佳解决方案是做类似的事情: objects = Object.objects.order_by('-votes')[x-4:x+2] 其中 x 是位置我正在搜索的对象。

p.s: 我使用的是 Python 2.7.9 和 Django 1.9

最佳答案

您可以通过简单的计数查询找到对象的位置 - 如下所示:

object_1 = Object.objects.get(pk=id)

# Count how many items have more votes than this one
# This effectively tells you the position in your ordered list
position = Object.objects.filter(votes__gt=object_1.votes).count()

# Now generate your list of nearby objects
objects = Object.objects.order_by('-votes')[position-4:position+2]

(注意:此示例需要针对 position < 4 进行调整。您还需要一些逻辑来确保在对象具有相同票数的情况下确定性排序。)

关于python - Django 查询给定位置的有序对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36675198/

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