单个Django queryset获取n个相邻项

2024-03-29 08:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在制作一个“无限的”连续滚动列表(比如twitter),希望能够导航到特定的项目。找到这个项目很简单,但是我需要在它之前和之后找到一些项目。在

我用一种类似的方法来回答这里提出的问题:Getting next and previous objects in Django

before = list(reversed(models.MyModel.objects.filter(pk__lt=pk).order_by('-pk')[:10]))
after = list(models.MyModel.objects.filter(pk__gte=pk).order_by('pk')[:11])
objects = before + after

有没有办法把这些合并到一个查询中?在

我不能简单地将两者与|运算符组合,例如before | after,而不使用list/reverse,因为片必须首先出现。我也不能做类似pk__lt=pk+10, pk__gt=pk-10的操作,因为对象可能会被删除。在

对于一个更复杂的例子,如果我不是按主键排序,我需要先用另一个查询获取对象:

^{pr2}$

同样,是否可以用一个查询来完成相同的任务?在


Tags: 项目对象lt列表byobjectsmodelsorder
1条回答
网友
1楼 · 发布于 2024-03-29 08:05:20

我曾经遇到过一个类似的问题,并用described here的方式解决了这个问题:定义一个描述对象顺序的SQL变量,然后按顺序排序。但是,这是纯SQL。我不知道有没有办法使用Django ORM。在

相关问题 更多 >