Django的 - 使用最后一个对象创建的,同时过滤器
-
12-09-2019 - |
题
抱歉,我完全新的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
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的最后一个对象。