我遇到了一个有趣的问题
让我说我的数据库中的对象比如:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
让我们将数字视为这些对象的ID
如果我想在5
之后获得两个对象,我需要使用此查询:
MyObject.objects.filter(id__gt=5).order_by("id")[:2]
这将返回给我这个结果:
[6, 7]
哪个是正确的结果。
现在我想在对象5 之前获得两个对象。我这样查询:
MyObject.objects.filter(id__lt=5).order_by("id")[:2]
然而,这回到我的身上:
[1, 2] instead of [3, 4]
所以我需要从 id = 5
的对象开始查询对象我知道有远程查询,但仅在使用ID时才适用。
是否可以在从该对象本身开始的某个id之前查询对象?
========更新========
有一个问题,有时对象也会被另一个条件过滤掉,这意味着id不会被索引关联:
[34, 45, 46, 66, 100, 105, 211]
如何才能获得两个对象,例如,在66
之前?
答案 0 :(得分:2)
我们可以通过使用切片和&降序排序
obj_id = 5
MyObject.objects.filter(id__lt=obj_id).order_by("-id")[1:3]
答案 1 :(得分:1)
按降序排列
MyObject.objects.filter(id__lt=5).order_by("-id")[:2]
你将得到2个最接近5的数字
如果您希望永远不会删除数据,那么您可以使用range(之间)
MyObject.objects.filter(id__range=(4, 3))