Django小技巧17: QuerySets的latest和earliest方法

Django小技巧17: QuerySets的latest和earliest方法

Posted November 05, 2018

翻译整理自: simpleisbetterthancomplex.com

就像QuerySets的first和last方法一样, Django 还提供了earliestlatest方法. 用于获取最早和最新的数据,增强代码的可读性.

最好在模型的Meta类中先定义get_latest_by属性

Python

class Post(models.Model):
    headline = models.CharField(max_length=150)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    publication_date = models.DateTimeField(blank=True, null=True)
    change_date = models.DateTimeField(blank=True, null=True)

    class Meta:
        get_latest_by = 'publication_date'

然后使用起来非常简单

Python

latest_post = Post.objects.latest()
earliest_post = Post.objects.earliest()

如果没有指定get_latest_by字段, 也可以通过参数来指定

Python

latest_change = Post.objects.latest('change_date')

如果以上两种方式都没有提供get_latest_by参数, 将会触发DoesNotExist错误. 它于 first 和 last 不同, 因为first和 last 在没有匹配到结果的情况下将会返回 None.

另外一个需要注意的点是, 和日期作为排序参数的时候, 可能会遇到日期为空的情况, 这时候工作的结果和我们想象的不一致。 所以我们可以过滤下日期为 Null 的结果,再做earliestlatest检索.

Python

Post.objects.filter(change_date__isnull=False).latest('change_date')

这两种方法, 通常与DateFieldDateTimeFieldIntegerField一起使用。应该避免和其他字段一起使用, 因为语义上是错误的。这两种方法主要是提供代码的方便性和可读性, 如果和非时间字段一起使用,会带来新的混淆.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT杂记

通过Java程序提交通用Mapreduce无法回收类的问题

问题描述 上次发布的博客 通过Java程序提交通用Mapreduce,在实施过程中发现,每次提交一次Mapreduce任务,JVM无法回收过程中产生的MapRe...

3116
来自专栏JavaEdge

Document.cookie

1574
来自专栏冰霜之地

Weex 中别具匠心的 JS Framework

为了达到所有页面在用户端达到秒开,也就是网络(JS Bundle下载)和首屏渲染(展现在用户第一屏的渲染时间)时间和小于1s。

2823
来自专栏Python研发

Django之Model世界

django为使用一种新的方式,即:关系对象映射(Object Relational Mapping,简称ORM)

1292
来自专栏Android自学

【转】jQuery验证控件jquery.validate.js使用说明+中文API

3014
来自专栏逆向技术

PE格式第六讲,导出表

                PE格式第六讲,导出表 请注意,下方字数比较多,其实结构挺简单,但是你如果把博客内容弄明白了,对你受益匪浅,千万不要看到字...

1966
来自专栏我有一个梦想

QT Creator 快速入门教程 读书笔记(三)

一   信号和槽   GUI 程序除了要绘制控件,还要响应系统和用户事件,例如重绘、绘制完成、点击鼠标、敲击键盘等。当事件发生时,UI 会产生相应的变化,让用户...

2878
来自专栏老马说编程

(64) 常见文件类型处理: 属性文件/CSV/EXCEL/HTML/压缩文件 / 计算机程序的思维逻辑

查看历史文章,请点击上方链接关注公众号。 对于处理文件,我们介绍了流的方式,57节介绍了字节流,58节介绍了字符流,同时,也介绍了比较底层的操作文件的方式,60...

4238
来自专栏生信宝典

Linux学习-文件排序和FASTA文件操作

环境变量的补充 PATH只是众多环境变量中的一个变量,用于存储可执行文件所在的目录,以便在用户输入命令时可以查询的到。尤其是自己写的脚本或安装的程序,系统不会知...

27310
来自专栏影子

Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享

63716

扫码关注云+社区

领取腾讯云代金券