You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取ID最小的Model对象(即最早创建的对象)?

获取Django模型中ID最小(最早创建)对象的正确方法

嘿,我来帮你搞定这个需求!你想要拿到Model里ID最小(也就是最早创建)的对象,当前的写法需要先手动找最小ID再过滤,其实Django ORM提供了更简洁高效的方式,不用绕弯子~

下面给你几种靠谱的实现方式:

  • 最推荐的简洁写法:利用order_by配合first()
    把结果按ID升序排列后,直接取第一个元素就是ID最小的对象。代码如下:

    oldest = Model.objects.order_by('id').first()
    

    这个方法的好处是:如果模型里没有任何数据,first()会返回None,不会抛出异常,处理空表场景更安全。

  • 更语义化的写法:使用earliest()
    Django ORM的earliest()方法专门用来获取最早创建的对象,默认会根据模型Meta类里的get_latest_by指定的字段排序。如果你的模型Meta设置了get_latest_by='id',直接写:

    oldest = Model.objects.earliest()
    

    如果没设置这个属性,也可以手动指定排序字段:

    oldest = Model.objects.earliest('id')
    

    注意:如果模型是空的,earliest()会抛出Model.DoesNotExist异常,需要根据你的业务场景考虑是否要捕获这个异常。

  • 对比你原来的写法(不推荐)
    你原来的思路需要先查询最小ID,再过滤,这样会触发两次数据库查询,效率更低:

    # 先查最小ID
    lowest_number = Model.objects.values_list('id', flat=True).order_by('id').first()
    # 再过滤
    oldest = Model.objects.filter(id=lowest_number).first()
    

    除非有特殊业务需求,否则完全没必要这么写。

额外提醒:这个方法的前提是你的模型ID是自增的AutoField(Django默认的主键类型),这样ID最小的对象确实是最早创建的。如果你的ID不是自增逻辑,那可能需要根据created_at这类时间字段来排序获取最早对象哦~

内容的提问来源于stack exchange,提问作者Zorgan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:37:56