Python 如何创建具有动态步骤数的有限状态机

Python 如何创建具有动态步骤数的有限状态机,python,django,transition,django-viewflow,django-fsm,Python,Django,Transition,Django Viewflow,Django Fsm,我有一个简单的线性工作流,其中单个任务将有一个审批者列表,在完成之前必须通过(线性地,依次)进行确认 我已将其设计为使用审批人的用户模型,另外还有两个模型: 管理工作流中单个任务细节的任务模型;及 明确管理任务和审批人之间关系的任务步骤模型(而不是依赖Django自动生成) 我想使用创建一个有限状态机来跟踪工作流中每个任务的状态 我知道,如果我预先定义每个工作流中的批准者数量,我可以轻松做到这一点。例如,如果是3,我可以简单地将其放在一个整数字段中,然后创建每个审批人都会调用的相关函数: /

我有一个简单的线性工作流,其中单个任务将有一个审批者列表,在完成之前必须通过(线性地,依次)进行确认

我已将其设计为使用审批人的
用户
模型,另外还有两个模型:

  • 管理工作流中单个任务细节的
    任务
    模型;及
  • 明确管理
    任务
    审批人
    之间关系的
    任务步骤
    模型(而不是依赖Django自动生成)
我想使用创建一个有限状态机来跟踪工作流中每个任务的状态

我知道,如果我预先定义每个工作流中的批准者数量,我可以轻松做到这一点。例如,如果是3,我可以简单地将其放在一个整数字段中,然后创建每个审批人都会调用的相关函数:

// 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):
...