3

私は単純な線形ワークフローを持っています。単一のタスクには、完了する前に確認のために通過する必要がある承認者のリストがあります (線形に順番に)。

Userこれは、承認者用のモデルを使用するように設計されており、2 つのモデルが追加されています。

  • Taskワークフロー内の個々のタスクの詳細を管理するモデル。と
  • TaskStepの間の関係を明示的に管理するモデル( Django に依存して自動入力するのではなく)。TasksApprover
    class Task(models.Model):
        title =  models.CharField(max_length=30)
        approvers = models.ManyToManyField(
            get_user_model(),
            related_name='approvers_taskstep_set',
            through='TaskStep'
        )

    class TaskStep(models.Model):
        approver = models.ForeignKey(
            get_user_model(), null=True, on_delete=models.SET_NULL
        )
        task = models.ForeignKey(Task, null=True, on_delete=models.SET_NULL)

django-fsmを使用して有限状態マシンを作成し、ワークフロー内の各タスクのステータスを追跡したいと考えています。

各ワークフローの承認者の数を事前に定義しておけば、これを簡単に実行できることはわかっています。たとえば、それが 3 の場合、単純にこれを integerfield に入れ、各承認者が呼び出す関連関数を作成できます。

// 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 でこれを行う方法はありますか、それとも間違っているのでしょうか? STATUS_CHOICESおそらく、数/長さをループしてプロキシを動的に作成しようと考えましたapproversが、開始方法がわかりません。

おそらく、およびのlamba機能ですか?sourcetargetFSMIntegerField

4

0 に答える 0