Как я могу получить предыдущие и следующие объекты из отфильтрованного, упорядоченного набора запросов?
У меня есть страница, основанная на объекте модели, и я хочу иметь ссылки на предыдущую и следующую страницы. Я немне нравится мое текущее решение, потому что оно требует оценки всего набора запросов (чтобы получитьids
список), а затем еще дваget
запросы. Конечно, есть какой-то способ сделать это за один проход?
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)
Порядок сортировки определен в модели, поэтому нездесь не обязательно, но учтите, что вы не можетеПредположим, что идентификаторы являются последовательными.