【问题标题】:Find previous and next items in a Django queryset, given an item给定一个项目,在 Django 查询集中查找上一个和下一个项目
【发布时间】:2015-08-07 09:56:11
【问题描述】:
所以我正在用 Django 构建一个博客,但我的大脑已经冻结了。
我在 BlogPost 详细视图中,我需要计算上一篇和下一篇文章,以便在文章正文之后提供它们作为导航选项。为了这个问题,我有两件事:
- 一个 BlogPost 实例
- 所有博客帖子的查询集,按
when(日期时间)字段一致排序。
我在查询中没有博客文章的索引,而且为我的初始博客文章扫描整个查询集听起来也不合适。是否有一种智能且廉价的方法可以从给定对象的任一侧获取对象(如果您不知道从哪里开始)?
【问题讨论】:
标签:
django
django-models
django-queryset
【解决方案1】:
Model.get_next_by_FOO # get_previous_by_FOO
被 Django documentation 稍微曝光不足,但很有用:
对于每个不具有 null=True 的 DateField 和 DateTimeField,
该对象将具有 get_next_by_FOO() 和 get_previous_by_FOO()
方法,其中 FOO 是字段的名称。这将返回下一个和
关于日期字段的前一个对象,引发了一个 DoesNotExist
适当时例外。