55

抱歉,我对 Django 和 Python 完全陌生。

我有 2 个问题。首先,我将如何获取对象列表中创建的最后一个对象(或最高 pk)?例如,我知道我可以使用以下内容来获取第一个对象:

list = List.objects.all()[0]

有没有办法获取 List.objects 的长度?我试过 List.objects.length 但无济于事。

其次,是否可以同时创建过滤器或组合列表?这是一个例子:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number)

我想要类似上面的东西,但更像:

def findNumber(request, number)
    phone_list = Numbers.objects.filter(cell=number or home_phone=number)

如果有的话,正确的语法是什么?

4

8 回答 8

78

我还没有尝试过,但我会查看QuerySets上的latest()运算符:

最新(字段名称=无)

使用作为日期字段提供的 field_name 按日期返回表中的最新对象。

此示例根据 pub_date 字段返回表中的最新条目:

Entry.objects.latest('pub_date')

如果您的模型的 Meta 指定 get_latest_by,您可以将 field_name 参数留给 latest()。默认情况下,Django 将使用 get_latest_by 中指定的字段。

与 get() 一样,如果具有给定参数的对象不存在,latest() 将引发 DoesNotExist。

注意 latest() 的存在纯粹是为了方便和可读性。

以及get_latest_by 上的模型文档:

get_latest_by

Options.get_latest_by

模型中 DateField 或 DateTimeField 的名称。这指定了在模型管理器的最新方法中使用的默认字段。

例子:

get_latest_by = "订单日期"

有关更多信息,请参阅 latest() 的文档。

编辑:韦德对 Q() 运算符有一个很好的答案。

于 2009-08-10T18:04:21.637 回答
45

这行得通!

Model.objects.latest('field')- 字段可以是 id。那将是最新的 id

于 2009-12-11T09:28:20.240 回答
26

从 Django 1.6 开始 - 最后

last()

类似first(),但返回查询集中的最后一个对象。

返回查询集匹配的最后一个对象,或者None如果没有匹配的对象。如果 QuerySet 没有定义排序,则查询集会自动按主键排序。

list = List.objects.last()为您提供最后创建的对象

于 2015-11-17T16:41:44.153 回答
18

对于最大的主键,试试这个:

List.objects.order_by('-pk')[0]

请注意,pk无论定义为主键的字段的实际名称如何,使用都有效。

于 2009-08-10T19:58:19.347 回答
3

您可以在查询集上使用 count() 方法来获取项目数。

list = List.objects.all()
list.count()

要过滤的参数是“AND”在一起的。如果您需要做 OR 过滤器,请查看 Q 对象。 http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects

于 2009-08-10T17:46:11.190 回答
0

替代创建的最新对象:

List.objects.all()[List.objects.count()-1]

当列表中没有项目时,需要添加一个 AssertionError 。

except AssertionError:
   ...
于 2014-07-23T10:30:04.013 回答
0

我正在研究的 Django 版本是 1.4.22,既不工作last也不lastet工作。我用最小的数据库负载解决的方法是:

latest = lambda model_objects, field : model_objects.values_list( field, flat = True ).order_by( "-" + field )[ 0 ]
latest_pk = latest( List.objects, "pk" )

此函数接受 query_set 作为输入。

您可以通过执行以下操作动态绑定此函数:

import types
List.objects.latest = types.MethodType( latest, List.objects )

那么你应该可以通过这个最新的pk轻松获得最后一个对象。

于 2018-02-14T08:13:49.497 回答
0

试试这个:

InsertId= (TableName.objects.last()).id
于 2022-01-20T12:29:52.577 回答