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

如何通过Django查询最后一条JobStatus为指定状态的Job对象

解决方法

要实现查询最后一条JobStatus的status为指定值的Job对象,可以利用Django ORM的Subquery和OuterRef完成单条查询,避免Python循环或原生SQL。具体实现如下:

1. 导入依赖模块

首先需要导入Django ORM提供的关联查询工具:

from django.db.models import Subquery, OuterRef

2. 构建子查询获取每个Job的最新状态

通过子查询,为每个Job筛选出其对应的最新(creation_time最晚)的JobStatus的status值:

# 子查询:获取当前Job对应的最新JobStatus的status
latest_status_subquery = JobStatus.objects.filter(
    job=OuterRef('pk')  # 关联外部Job查询的当前对象主键
).order_by('-creation_time').values('status')[:1]  # 按创建时间倒序,仅取第一条的status

3. 关联子查询并过滤目标Job

在Job的查询集中,通过annotate为每个Job添加临时字段latest_status(值为子查询返回的最新状态),再筛选出该字段匹配指定值的Job:

# 筛选最新状态为目标值的Job
target_jobs = Job.objects.annotate(
    latest_status=Subquery(latest_status_subquery)
).filter(latest_status="你需要指定的状态值")

逻辑说明

  • OuterRef('pk')用于引用外部Job查询中当前对象的主键,实现子查询与主查询的关联绑定。
  • order_by('-creation_time')[:1]确保子查询仅返回当前Job的最新一条JobStatus记录的status值。
  • annotate将子查询结果作为Job对象的临时属性,后续通过filter直接筛选符合条件的Job,全程仅触发一次数据库查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:20:46