Django - 获取创建的最后一个对象,并发过滤器
道歉,我对Django和Python完全陌生。Django - 获取创建的最后一个对象,并发过滤器
我有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)
什么是正确的语法,如果有的话?
我没有试过,但我想看看latest()操作上QuerySets:
最新(FIELD_NAME =无)
返回最新的对象在 表,按日期使用作为日期字段提供的字段名称 。
此示例返回表的最新条目 ,根据 PUB_DATE领域:
Entry.objects.latest( 'PUB_DATE')
如果模型的元指定 get_latest_by,你可以请将 field_name参数设置为latest()。 默认情况下,Django将使用在 get_latest_by中指定的字段。
Like get(),latest()引发 DoesNotExist如果对象不存在 存在给定的参数。
注意latest()纯粹用于 方便性和可读性。
而且model docs on get_latest_by:
get_latest_by
Options.get_latest_by
将DateField或DateTimeField字段在模型的名称。这指定了您的模型管理器最新方法中使用的默认字段。
实施例:
get_latest_by = “order_date的”
查看最新的文档()的更多。
编辑:韦德在Q()运算符上有一个很好的答案。
你可以在查询中使用count()方法设置获取项目的数量。
list = List.objects.all()
list.count()
过滤器的参数是“与”在一起的。如果你需要做或过滤看看Q对象。 http://docs.djangoproject.com/en/dev/topics/db/queries/#complex-lookups-with-q-objects
谢谢,韦德!正是我需要的。 – zdyn 2009-08-10 18:04:07
对于最大的主键,试试这个:
List.objects.order_by('-pk')[0]
注意,使用pk
作品无论定义为您的主键字段的实际名称。
这个工程!
Model.objects.latest('field')
- 字段可以是id。这将是最新的ID
看起来有点像我在你四个月前写的答案,不是吗? – hughdbrown 2010-10-12 18:52:37
你们并没有真正激发我的信心,我还没有尝试过这种做法。这个答案是。 – 2016-04-17 19:36:23
替代用于创建的最新对象:
List.objects.all()[List.objects.count()-1]
情况下必须有列表中没有的项目添加一个AssertionError的情况。
except AssertionError:
...
这将加载数据库中的所有模型。 – wieczorek1990 2016-07-22 14:32:07
由于Django的1.6 - 最后
last()
作品像first()
,但返回的查询集的最后一个对象。
返回查询集匹配的最后一个对象,如果没有匹配对象则返回None
。如果QuerySet没有定义的顺序,那么查询集由主键自动排序。
list = List.objects.last()
为您提供了创建
我工作的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的最后一个对象。
谢谢,休!我也会研究这一点。 – zdyn 2009-08-10 18:08:35
真棒答案=)谢谢! – 2011-05-01 19:57:03
@hughdbrown我们如何使用最新的Django模板? – MegaBytes 2016-03-08 05:56:31