使用单个Django QuerySet获取n个相邻项

3
我正在制作一个“无限”/连续滚动列表(类似于Twitter),希望能够导航到特定的项目。找到该项目很简单,但我需要获取它之前和之后的几个项目。
我正在使用类似于此处建议的答案的方法:在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”,因为对象可能已经被删除。
对于更复杂的例子,如果我按照除主键以外的其他方式进行排序,我需要先用另一个查询获取对象:
object = get_object_or_404(models.MyModel, pk=pk)
before = list(reversed(models.MyModel.objects.filter(pk__lt=object.other_key).order_by('-other_key')[:10]))
after = list(models.MyModel.objects.filter(pk__gte=object.other_key).order_by('other_key')[:11])
objects = before + after

同样,是否有可能通过单个查询完成相同的操作?
1个回答

0

我曾经遇到过类似的问题,并且通过这里描述的方法解决了它:定义一个描述对象顺序的 SQL 变量,然后按照该变量排序。但是,这只是普通的 SQL。我不知道是否有一种使用 Django ORM 的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接