Django - 获取最后创建的对象,多个过滤器
抱歉,我对Django和Python完全是新手。
我有两个问题。首先,我想知道怎么才能获取到创建的最后一个对象(或者说是ID最大的那个)在一堆对象中?比如,我知道我可以用下面的代码来获取第一个对象:
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)
如果有的话,正确的语法是什么?
8 个回答
自从 Django 1.6 版本开始 - last
last()
这个方法的作用和 first()
类似,不过它返回的是查询结果中的最后一个对象。
它会返回查询结果中最后一个符合条件的对象,如果没有找到符合条件的对象,就会返回 None
。如果查询结果没有特别的排序规则,那么默认会按照主键的顺序进行排序。
list = List.objects.last()
这行代码会给你返回最后创建的对象。
这个方法有效!
Model.objects.latest('field')
- 这里的field可以是id,这样就能得到最新的id。
我还没试过这个,不过我会看看 latest() 这个操作符,它是在 QuerySets 中的:
latest(field_name=None)
这个方法会根据日期返回表中最新的对象,你可以提供一个字段名作为日期字段。
比如这个例子会根据
pub_date
字段返回表中最新的条目:
Entry.objects.latest('pub_date')
如果你的模型的 Meta 中指定了
get_latest_by
,你可以不传field_name
参数给latest()
。Django 会默认使用get_latest_by
中指定的字段。就像
get()
一样,如果没有符合条件的对象,latest()
也会抛出DoesNotExist
的错误。需要注意的是,
latest()
这个方法主要是为了方便和可读性。
还有关于 get_latest_by 的模型文档:
get_latest_by
Options.get_latest_by
这是模型中一个日期字段(DateField 或 DateTimeField)的名称。它指定了在模型管理器的
latest
方法中默认使用的字段。例子:
get_latest_by = "order_date"
想了解更多,可以查看
latest()
的文档。
补充:Wade 对 Q()
操作符有个很好的回答。