这听起来很奇怪,但这是一个非常简单的想法。我正在尝试为我正在建设的网站制作一个简单的Flickr。当我想在页面上显示单张照片(来自我的Photo
模型)但我还希望在流中显示图像之前的图像以及之后的图像时,会出现此特定问题。
如果我只按日期对这些流进行排序,或者只按ID排序,那可能会更简单......但我不是。我希望允许用户通过各种方法进行排序和筛选。分类很简单。我已经完成了,我有一个结果集,包含0多个Photo
s。
如果我想要一个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的两个(或一个或零)最近邻居的东西,我很想知道!
答案 0 :(得分:1)
我看到以下可能性:
您的网址查询参数包含排序/过滤信息以及某种“商品编号”,即您过滤的查询集中的商品编号 。这是一个简单的例子 - 上一个和下一个是项目编号减1和加1(加上一些边界检查)
您希望网址为永久链接,并包含照片主键(或某些唯一ID)。在这种情况下,您可能会将排序/过滤存储在:
简而言之,将项目编号存储在存储过滤/排序信息的任何位置。
答案 1 :(得分:1)
您可以尝试以下方法: