首页 > 解决方案 > django - last() 和 first() 返回相同的对象

问题描述

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

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

运行代码时,输​​出如下:

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

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

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

谢谢!

标签: pythondjango

解决方案


CreateView我在模型类元数据上使用 Django 3、基于类和排序属性时偶然发现了同样的问题。我不确定为什么会发生这种情况,但是order_by方法可以解决问题。

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

编辑:

显然,该模型没有任何明确的排序属性,然后首先作为最后一个:),如果您尝试分页,您将收到更清晰的警告消息。有很多方法可以告诉 Django 模型如何处理排序,例如:

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

希望现在更清楚@Raoul!


推荐阅读