这听起来很奇怪,但这是一个非常简单的想法。我正在尝试为我正在构建的网站制作一个简单的 Flickr。当我想在页面上显示单张照片(来自我的Photo
模型)但我还想在流中显示它之前的图像和它之后的图像时,就会出现这个特定问题。
如果我只是按日期对这些流进行排序,或者只是按 ID 排序,那可能会更简单……但我不是。我想让用户通过各种方法进行排序和过滤。排序很简单。我已经这样做了,我有一个包含 0-manyPhoto
的结果集。
如果我想要一个Photo
,我从那个过滤/排序/等流开始。从它我需要得到当前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 选择两个(或一个或零个)最近的邻居,我很想知道!