django-last()和first()返回相同的对象

时间:2018-07-12 09:45:05

标签: python django

我在查询集中有两个对象,按创建日期排序。我正在尝试从那里获取第一个和最后一个元素:

ordered = self.get_queryset().order_by('created')
print(ordered)
print(ordered.first(), ordered.last())

运行代码时,这是输出:

<QuerySet [<Item: itemone>, <Item: itemtwo>]>
itemone itemone

显然有两个对象,但是由于某种原因,它给了我相同的对象。

顺便说一句:我正在使用SQLite3。

谢谢!

2 个答案:

答案 0 :(得分:0)

我偶然发现了使用Django 3,基于CreateView类和模型类meta的ordering属性的同一问题。我不确定为什么会这样,但是order_by方法解决了这个问题。

GoodModel.objects.order_by().last()

答案 1 :(得分:0)

我在一些模拟对象上遇到了同样的问题 - 结果我是在“创建”时间戳上排序,但由于所有对象的时间戳完全相同,first() 和 last() 将始终返回相同的对象。

这是一个功能,而不是一个错误:

https://code.djangoproject.com/ticket/30901

通过为每个“已创建”字段提供唯一时间戳来解决此场景中的问题。

一般来说,请确保您排序的值是唯一的。