道歉,我是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)
正确的语法是什么?
答案 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()引发 如果对象没有,则不存在 存在给定的参数。
注意最新()纯粹存在 便利性和可读性。
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,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获得最后一个对象。