Django,在某个id

时间:2018-03-15 14:10:36

标签: python django django-models

我遇到了一个有趣的问题

让我说我的数据库中的对象比如:

[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之前?

2 个答案:

答案 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))