Python 如何创建具有动态步骤数的有限状态机
我有一个简单的线性工作流,其中单个任务将有一个审批者列表,在完成之前必须通过(线性地,依次)进行确认 我已将其设计为使用审批人的Python 如何创建具有动态步骤数的有限状态机,python,django,transition,django-viewflow,django-fsm,Python,Django,Transition,Django Viewflow,Django Fsm,我有一个简单的线性工作流,其中单个任务将有一个审批者列表,在完成之前必须通过(线性地,依次)进行确认 我已将其设计为使用审批人的用户模型,另外还有两个模型: 管理工作流中单个任务细节的任务模型;及 明确管理任务和审批人之间关系的任务步骤模型(而不是依赖Django自动生成) 我想使用创建一个有限状态机来跟踪工作流中每个任务的状态 我知道,如果我预先定义每个工作流中的批准者数量,我可以轻松做到这一点。例如,如果是3,我可以简单地将其放在一个整数字段中,然后创建每个审批人都会调用的相关函数: /
用户
模型,另外还有两个模型:
- 管理工作流中单个任务细节的
模型;及任务
- 明确管理
和任务
之间关系的审批人
模型(而不是依赖Django自动生成)任务步骤
// in Task(models.Model):
STATUS_APPROVER_1 = 0
STATUS_APPROVER_2 = 1
STATUS_APPROVER_3 = 2
STATUS_CHOICES = (
(STATUS_APPROVER_1 , 'With approver 1'),
(STATUS_APPROVER_2 , 'With approver 2'),
(STATUS_APPROVER_3 , 'With approver 3'),
)
status = FSMIntegerField(
choices=STATUS_CHOICES, default=STATUS_APPROVER_1, protected=True
)
...
@transition(field=status, source='STATUS_APPROVER_1', target=STATUS_APPROVER_2)
def advance_approver_1(self):
...
但是,假设我想让用户自己定义批准者的数量(以及步骤的数量)。我该怎么做呢?我会一直保持这个线性级数,而不是平行级数
有没有办法用django fsm做到这一点,或者我看错了吗?我想通过循环查看审批人的数量/长度来动态创建状态选择
代理,但我不确定如何开始
可能是FSMIntegerField
的源和目标中的lamba
函数
// in Task(models.Model):
STATUS_APPROVER_1 = 0
STATUS_APPROVER_2 = 1
STATUS_APPROVER_3 = 2
STATUS_CHOICES = (
(STATUS_APPROVER_1 , 'With approver 1'),
(STATUS_APPROVER_2 , 'With approver 2'),
(STATUS_APPROVER_3 , 'With approver 3'),
)
status = FSMIntegerField(
choices=STATUS_CHOICES, default=STATUS_APPROVER_1, protected=True
)
...
@transition(field=status, source='STATUS_APPROVER_1', target=STATUS_APPROVER_2)
def advance_approver_1(self):
...