モデル オブジェクトに基づくページがあり、前後のページへのリンクが必要です。ids
(リストを取得するために) クエリセット全体を評価し、さらに 2 つのクエリを評価する必要があるため、現在のソリューションは好きではありませんget
。確かに、これを1回のパスで実行できる方法はありますか?
def get_prev_and_next_page(current_page):
ids = list(Page.objects.values_list("id", flat=True))
current_idx = ids.index(current_page.id)
prev_page = Page.objects.get(id=ids[current_idx-1])
try:
next_page = Page.objects.get(id=ids[current_idx+1])
except IndexError:
next_page = Page.objects.get(id=ids[0])
return (prev_page, next_page)
ソート順はモデルで定義されているため、ここで処理する必要はありませんが、ID が連続しているとは想定できないことに注意してください。