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

在Django Viewflow中能否获取状态变更及执行任务后变更的任务?

在Django Viewflow中追踪任务状态变更

一、能否获取状态发生变更的任务?

可以,主要通过两种方式实现:

  • 直接查询Task模型:Viewflow的Task模型自带status、created和modified字段。若任务状态变更,modified时间会同步更新,你可以通过过滤modified > created的任务,得到所有状态发生过变更的任务。
  • 使用task_status_changed信号:这个信号会在任务状态变更时自动触发,你可以在信号接收器中记录变更详情,后续直接从自定义日志表中查询。示例代码:
from django.dispatch import receiver
from viewflow.signals import task_status_changed
from .models import TaskStatusLog  # 自定义的状态变更日志模型

@receiver(task_status_changed)
def log_task_status_change(sender, task, old_status, **kwargs):
    TaskStatusLog.objects.create(
        task_id=task.id,
        process_id=task.process_id,
        old_status=old_status,
        new_status=task.status,
        changed_at=task.modified
    )

之后只需查询TaskStatusLog表,就能关联到所有状态变更过的任务。

二、执行某一任务后,能否获取随之变更的任务?

可以,通过以下方法追踪关联任务的状态变更:

  • 基于流程实例查询:每个任务都属于一个process流程实例,执行任务后,你可以记录当前任务的完成时间,再查询同一流程中modified晚于该时间的任务(排除当前任务本身),这些就是随当前任务执行而状态变更的任务。示例:
# 假设当前任务为current_task
execution_time = current_task.modified
related_changed_tasks = current_task.process.task_set.filter(
    modified__gt=execution_time
).exclude(id=current_task.id)
  • 利用task_completed信号:在任务完成的信号接收器中,直接查询同一流程内的关联变更任务,适合批量记录或自动化处理场景:
from django.dispatch import receiver
from viewflow.signals import task_completed

@receiver(task_completed)
def track_related_changes(sender, task, **kwargs):
    execution_time = task.modified
    related_tasks = task.process.task_set.filter(
        modified__gt=execution_time
    ).exclude(id=task.id)
    # 此处可对related_tasks进行后续处理,比如记录或通知
  • 流程钩子自定义逻辑:如果是自定义Flow类,可在Flow的on_task_completed钩子中添加逻辑,直接获取因当前任务触发的后续任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:31:08