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



我在一个查询集中有两个对象,它按创建日期排序。我正在努力获得第一个也是最后一个元素:

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类和模型类元上的排序属性时偶然发现了同样的问题。我不确定为什么会发生这种情况,但order_by方法解决了这个问题。

# only for clarification used last()
GoodModel.objects.order_by().last()

编辑:

显然,该模型没有任何显式的排序属性,first as last:(,如果您尝试分页,您将得到更清晰的警告消息。有很多方法可以告诉Django模型如何处理订单,比如:

class UsefulModel(models.Model):

class Meta:
ordering='-created' # for example

希望现在更清楚了@Raoul!

我在一些模拟对象上遇到了同样的问题-事实证明我是根据"创建"的时间戳进行排序的,但由于所有对象的时间戳都完全相同,所以first((和last((总是返回相同的对象。

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

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

通过给每个"创建"字段一个唯一的时间戳来解决此场景中的问题。

一般情况下,请确保排序依据的值是唯一的。

相关内容

最新更新