奇妙に聞こえますが、それは本当に単純な考えです。作成しているWebサイト用にシンプルなFlickrを作成しようとしています。この特定の問題はPhoto
、ページに(モデルからの)1枚の写真を表示したいが、ストリームの前の画像と後の画像も表示したい場合に発生します。
これらのストリームを日付で並べ替えるだけの場合、またはIDで並べ替えるだけの場合は、もっと簡単かもしれません...しかし、そうではありません。ユーザーがさまざまな方法で並べ替えとフィルタリングを行えるようにしたいと思います。並べ替えは簡単です。私はそれを実行し、0から多くPhoto
のを含む結果セットを持っています。
単一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で2つ(または1つ、または0)の最も近いネイバーを持つものを選択する方法がある場合は、知りたいです!