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

时间:2009-08-10 17:35:15

标签: python django filter django-views

道歉,我是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)

正确的语法是什么?

7 个答案:

答案 0 :(得分:50)

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

  

最新(FIELD_NAME =无)

     

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

     

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

     

Entry.objects.latest( 'PUB_DATE')

     

如果您的模型的Meta指定   get_latest_by,你可以放弃   last_name的field_name参数。   Django将使用指定的字段   默认情况下为get_latest_by。

     

像get(),latest()引发   如果对象没有,则不存在   存在给定的参数。

     

注意最新()纯粹存在   便利性和可读性。

model docs on get_latest_by

  

get_latest_by

     

Options.get_latest_by

     

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

     

示例:

     

get_latest_by =“order_date”

     

请参阅最新文档()了解更多信息。

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

答案 1 :(得分:26)

这有效!

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

答案 2 :(得分:15)

对于最大的主键,请尝试以下方法:

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

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

答案 3 :(得分:13)

自Django 1.6起 - 最后

last()

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

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

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

答案 4 :(得分: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

答案 5 :(得分:0)

替代最新创建的对象:

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

当列表中没有项目时,必须为情况添加AssertionError。

except AssertionError:
   ...

答案 6 :(得分:0)

我正在研究Django版本是1.4.22,lastlastet都不起作用。 我用最小数据库加载来解决的方法就像:

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获得最后一个对象。