如何在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
相关产品推荐
相关产品推荐

