我正在制作一个“无限”/连续滚动列表(如 Twitter),并希望能够导航到特定项目。找到该项目很简单,但我需要在它之前和之后获取一些项目。
我使用与此处建议的答案类似的方法:获取 Django 中的下一个和上一个对象 https://stackoverflow.com/questions/6021694/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
因为对象可能会被删除。
对于更复杂的示例,如果我按主键以外的其他内容进行排序,我需要首先使用另一个查询来获取对象:
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
同样,是否可以通过单个查询完成相同的事情?
我曾经遇到过类似的问题并解决了这个问题此处描述 https://groups.google.com/forum/#!topic/django-users/UmjaAGBNFsU:定义一个描述对象顺序的 SQL 变量,然后按其排序。然而,这是简单的 SQL。我不知道是否有办法使用 Django ORM。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)