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

如何在Django中获取满足条件的最后一条记录?

Django获取满足条件的最后一条记录解决方案

问题原因

  • get()方法要求查询结果唯一,当匹配到多条记录时会抛出MultipleObjectsReturned异常,这就是你遇到的错误。
  • 你尝试的Rooms.objects.get(staff_id=1000).last()无效,是因为get()返回的是单个Rooms实例,而非QuerySet集合,单个实例没有last()方法。

正确解决方案

方法1:使用filter()+last()

filter()返回匹配条件的QuerySet集合,last()会按模型默认排序(通常是主键id升序)取最后一条记录:

getStaffRecords = Rooms.objects.filter(staff_id=1000).last()
if getStaffRecords:
    staffRoom = getStaffRecords.room

⚠️ 注意:如果没有匹配的记录,last()会返回None,所以最好添加判断避免AttributeError。

方法2:使用filter()+order_by('-id').first()

如果需要明确按主键倒序获取最新记录(不受默认排序影响),可以显式指定排序规则后取第一条:

getStaffRecords = Rooms.objects.filter(staff_id=1000).order_by('-id').first()
if getStaffRecords:
    staffRoom = getStaffRecords.room

这种写法更直观,确保拿到的是staff_id=1000中id最大的那条记录。

额外说明

  • 如果你能确保staff_id=1000一定有记录,可以省略if判断,但生产环境建议保留,避免空对象访问属性的错误。
  • 不要混用get()和last()/first(),前者返回单个实例,后者是QuerySet的专属方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:10:40