听起来很奇怪,但这是一个非常简单的想法。我正在尝试为我正在构建的网站制作一个简单的Flickr。当我想在页面上显示单张照片(来自我的Photo
型号)时,会出现此特定问题,但我也希望在流之前显示图像,并在其后显示图像。在Django查询当前选择之前和之后获取记录
如果我只是按日期排序这些流,或者只是按ID排序,那可能会更简单...但我不是。我想让用户通过各种方法进行排序和过滤。分类很简单。我已经完成了这项工作,并且我有一个结果集,其中包含0-many Photo
s。
如果我想要一个Photo
,我从那个过滤/排序/ etc流开始。从它我需要得到当前Photo
,Photo
之前它和Photo
之后。
以下是我正在看的,目前。
prev = None
next = None
photo = None
for i in range(1, filtered_queryset.count()):
if filtered_queryset[i].pk = desired_pk:
if i>1: prev = filtered_queryset[i-1]
if i<filtered_queryset.count(): next = filtered_queryset[i+1]
photo = filtered_queryset[i]
break
这似乎只是令人讨厌的混乱。并且效率低下。噢,我的主,如此低效。有人可以改善吗?
Django的查询是后期绑定的,所以尽可能利用这个好处,尽管我想这可能是不可能的,因为我的可怕限制。
编辑:它发生在我身上,我可以查找一些SQL来重新筛选查询集。如果有一种方法可以用它的两个(或一个或零个)最近的SQL来选择它,我很想知道!
好像你试图创建索引,你没有。如果你有一群人,并且从人群中挑选出一个人,并说:“找到与这个人相关的下一个最矮和下一个最短的人”,你会怎么做? – 2009-10-06 19:54:41
“然后,只有那样,我才能看到我的图像是否在选择中”< - 你能解释为什么是这种情况吗?你没有在网址中的图像ID? – 2009-10-06 19:56:39
@Emil我有想要的图像的pk,但我需要找到它在列表中(如果以上是唯一的选项,则需要通过它来勾选)。我不能再过滤一次(或'.get()'),因为这会阻止我获得上一页/下一页照片 – Oli 2009-10-06 19:59:18