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

Python django-last()和first()返回相同的对象,python,django,Python,Django,我在queryset中有两个对象,按创建日期排序。我正试图从中获得第一个和最后一个元素: ordered = self.get_queryset().order_by('created') print(ordered) print(ordered.first(), ordered.last()) 运行代码时,这是输出: <QuerySet [<Item: itemone>, <Item: itemtwo>]> itemone itemone 项目一项目一

我在queryset中有两个对象,按创建日期排序。我正试图从中获得第一个和最后一个元素:

ordered = self.get_queryset().order_by('created')
print(ordered)
print(ordered.first(), ordered.last())
运行代码时,这是输出:

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

项目一项目一
显然有两个物体,但出于某种原因,它给了我相同的一个

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


谢谢

我在使用Django 3、
CreateView
class-based和模型类meta上的ordering属性时偶然发现了相同的问题。我不知道为什么会发生这种情况,但是
order\u by
方法解决了这个问题

#仅用于最后使用的澄清()
GoodModel.objects.order_by().last()
编辑: 显然,该模型没有任何显式的排序属性,那么first as last:)如果您尝试分页,您将得到更清晰的警告消息。 有很多方法可以告诉Django model如何处理订单,例如:

class UsefulModel(models.Model):
    
    class Meta:
        ordering='-created' # for example

希望现在更清楚@Raoul

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

这是一个功能,不是一个bug:

通过给每个“已创建”字段一个唯一的时间戳修复此场景中的问题


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

其中一个值是否创建了
is
NULL
?能否提供这两个对象的(相关)数据?我认为至少创建的
列在这里很有趣。不,时间戳在它们两个上都存在。哦,我想我已经发现了错误。问题是它们有完全相同的时间戳…而不是其本身,因为请注意,
.first()
.last()
是两个查询,在出现平局时,数据库不需要对项目进行排序。除了按
创建的
排序外,元素还可以随机显示。如果一行已经在内存中,那么返回该行比执行更昂贵的磁盘操作更有效。这正是OhMad所做的。这是无效的错误!