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

