Skip to main content
 首页 » 编程设计

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

2025年04月02日43zhoujg

我有一个接受对象 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 进行调整。您还需要一些逻辑来确保在对象具有相同票数的情况下确定性排序。)