聽起來很奇怪,但這是一個非常簡單的想法。我正在嘗試爲我正在構建的網站製作一個簡單的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