给定一个项目,在 Django 查询集中查找上一个和下一个项目

Find previous and next items in a Django queryset, given an item

所以我正在用 Django 构建博客,但我的大脑冻结了。

我正在查看 BlogPost 详细信息视图,我需要算出上一个和下一个 post,以便我可以在 post 正文之后将它们作为导航选项提供。为了这个问题,我有两件事:

我在查询中没有博客 post 的索引,为我的初始博客 post 扫描整个查询集听起来也不对。是否有一种智能且廉价的方式从给定对象的任一侧获取对象(如果您不知道它从哪里开始)?

Model.get_next_by_FOO  # get_previous_by_FOO

Django documentation 稍微曝光不足,但很有用:

For every DateField and DateTimeField that does not have null=True, the object will have get_next_by_FOO() and get_previous_by_FOO() methods, where FOO is the name of the field. This returns the next and previous object with respect to the date field, raising a DoesNotExist exception when appropriate.