我有一个基于模型对象的页面,我希望有指向上一页和下一页的链接。我不喜欢我当前的解决方案,因为它需要评估整个查询集(以获取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)
排序顺序在模型中定义,因此不必在这里处理,但请注意,您不能假设 id 是连续的。