Django小技巧17: QuerySets的latest和earliest方法
Posted November 05, 2018
就像QuerySets的first和last方法一样, Django 还提供了earliest
和latest
方法. 用于获取最早和最新的数据,增强代码的可读性.
最好在模型的Meta类中先定义get_latest_by
属性
然后使用起来非常简单
如果没有指定get_latest_by
字段, 也可以通过参数来指定
如果以上两种方式都没有提供get_latest_by
参数, 将会触发DoesNotExist
错误. 它于 first 和 last 不同, 因为first和 last 在没有匹配到结果的情况下将会返回 None.
另外一个需要注意的点是, 和日期作为排序参数的时候, 可能会遇到日期为空的情况, 这时候工作的结果和我们想象的不一致。 所以我们可以过滤下日期为 Null 的结果,再做earliest
和latest
检索.
这两种方法, 通常与DateField
、DateTimeField
或IntegerField
一起使用。应该避免和其他字段一起使用, 因为语义上是错误的。这两种方法主要是提供代码的方便性和可读性, 如果和非时间字段一起使用,会带来新的混淆.