抱歉,我完全新的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)

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

有帮助吗?

解决方案

我没有试过,但我会看的最新的()上操作查询集

  

最新(FIELD_NAME =无)

     

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

     

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

     

Entry.objects.latest( 'PUB_DATE')

     

如果您的模型元指定   get_latest_by,你可以离开关闭   FIELD_NAME参数最新的()。   Django会使用在指定的字段   默认get_latest_by。

     

获得更多信息(),最新()会引发   DoesNotExist如果一个对象不   具有给定参数存在。

     

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

和在模型文档get_latest_by

  

get_latest_by

     

Options.get_latest_by

     

模型中的一个的DateField或DateTimeField字段的名称。这指定缺省的字段在模型管理器的最新方法来使用。

     

示例:

     

get_latest_by = “order_date的”

     

请参阅的文档为最新()的更多。

编辑:瓦德具有Q上一个很好的答案()运算符

其他提示

这个作品!

Model.objects.latest('field') - 字段可以标识。这将是最新的ID

有关最大主键,尝试:

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

请注意,使用pk工作定义作为主键的字段的实际名称无关。

<强>由于Django的1.6 - 最后

last()

工程就像first(),但在查询集返回最后一个对象。

如果没有匹配的对象,则返回由查询集,或None匹配的最后一个对象。如果查询集已没有顺序定义,则该查询集自动由主键进行排序。

list = List.objects.last()给出最后创建的对象

可以上设置的获取项目数查询中使用的计数()方法。

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

参数到过滤器都是“AND”编在一起。如果您需要做什么或过滤器看以Q对象。 HTTP://docs.djangoproject的.com / EN的/ dev /主题/分贝/查询/#复杂的查找与 - q-对象

替代最新的对象创建:

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

有必要当在列表中没有项添加一个AssertionError为的情况。

except AssertionError:
   ...

我在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的最后一个对象。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top