我有一个接受对象 id 的函数。有了这个 id,我可以获取表的对象 object_1 = Object.objects.get(pk=id)。我想让 Object 表按名为 votes 的位置排序。例如,objects = Object.objects.order_by('-votes') 我想找到 object_1 在 objects 中的位置.
我怎样才能做到这一点?据我所知,查询集不是一个列表,我必须遍历所有元素,当我在表中有很多条目时,这将是一个很大的性能问题。
这一切的目的是为了展示一个按票数排序的排名,其中我只展示了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 进行调整。您还需要一些逻辑来确保在对象具有相同票数的情况下确定性排序。)
