前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django小技巧17: QuerySets的latest和earliest方法

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

作者头像
用户1416054
发布2018-12-06 11:21:54
2.2K0
发布2018-12-06 11:21:54
举报
文章被收录于专栏:JackeyGao的博客JackeyGao的博客

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

Posted November 05, 2018

翻译整理自: simpleisbetterthancomplex.com

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

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

Python

代码语言:javascript
复制
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

代码语言:javascript
复制
latest_post = Post.objects.latest()
earliest_post = Post.objects.earliest()

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

Python

代码语言:javascript
复制
latest_change = Post.objects.latest('change_date')

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

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

Python

代码语言:javascript
复制
Post.objects.filter(change_date__isnull=False).latest('change_date')

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Django小技巧17: QuerySets的latest和earliest方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档