Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-获取创建的最后一个对象,同步过滤器_Python_Django_Filter_Django Views - Fatal编程技术网

Python Django-获取创建的最后一个对象,同步过滤器

Python Django-获取创建的最后一个对象,同步过滤器,python,django,filter,django-views,Python,Django,Filter,Django Views,抱歉,我对Django和Python完全陌生 我有两个问题。首先,我将如何获得在对象列表中创建的最后一个对象(或最高pk)?例如,我知道我可以使用以下方法获取第一个对象: list = List.objects.all()[0] 有没有办法获得List.objects的长度?我试过List.objects.length,但没用 第二,是否可以创建同步过滤器或合并列表?以下是一个例子: def findNumber(request, number) phone_list = Number

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

我有两个问题。首先,我将如何获得在对象列表中创建的最后一个对象(或最高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)
如果有的话,正确的语法是什么?

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

list = List.objects.all()
list.count()
要筛选的参数是“和”组合在一起的。如果需要,请查看Q对象。

我还没有试过这个,但我会看看下面的操作符:

最新(字段名称=无)

返回列表中最新的对象 表,按日期,使用字段名称 作为日期字段提供

此示例返回最新的条目 在表格中,根据 发布日期字段:

Entry.objects.latest('发布日期')

如果模型的元指定 把最新的弄过去,你可以把电话挂断 字段\最新()的名称参数。 Django将使用中指定的字段 默认情况下,获取最新的

像get()一样,latest()提高了 如果一个对象没有 使用给定的参数存在

注意:latest()的存在纯粹是为了 方便易读

获取最新信息

选项。获取最新的

模型中日期字段或日期时间字段的名称。这将指定要在模型管理器的最新方法中使用的默认字段

例如:

通过=“订单日期”获取最新订单

有关详细信息,请参阅文档中的最新版本()


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

对于最大的主键,请尝试以下操作:

List.objects.order_by('-pk')[0]
请注意,无论定义为主键的字段的实际名称是什么,使用
pk
都有效。

这是有效的


Model.objects.latest('field')
-字段可以是id。这将是创建的最新对象的最新id

替代:

List.objects.all()[List.objects.count()-1]
当列表中没有项目时,有必要为案例添加AssertionError

except AssertionError:
   ...

自Django 1.6-上一次以来

last()

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

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


list=list.objects.last()
提供创建的最后一个对象

我正在使用的Django版本是1.4.22,无论是
last
还是
lastet
都不起作用。 我解决最小db负载的方法如下:

latest = lambda model_objects, field : model_objects.values_list( field, flat = True ).order_by( "-" + field )[ 0 ]
latest_pk = latest( List.objects, "pk" )
此函数接受查询集作为输入

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

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

然后,您应该能够通过最近的pk轻松获取最后一个对象。

谢谢,韦德!这正是我需要的。看起来有点像我在你们四个月前写的答案,不是吗?你们的答案并不能激发我的信心,我还没试过。答案是这样的。如果在dame date日期但在不同的时间插入了更多的对象,是否会引起冲突?(我的意思是,保存在DateField中的日期确实带来了隐藏的时间信息?@hughdbrown我们如何使用Django模板中的最新版本??这将从数据库中加载所有模型。