Обновление экземпляров модели в определенном порядке

Я работаю над приложением на django. У меня есть поток процесса, в котором есть шаги и их соответствующий статус. У меня есть модель для шагов. Ниже приведена моя диаграмма потока

enter image description here

Как только статус шага 1 меняется на завершенный, статус всех следующих шагов обновляется.

Я написал сигнал post_save для изменения статуса шагов.

@receiver(post_save, sender=WorkflowStep)
def updateWorkflowStep(sender, instance, created, **kwargs):
    
    # updated step 2, step 5, and step 8 statuses

Проблема: Как только я обновлю статус шага "2", сработает сигнал post_save и обновит статус шага "3", а затем шага "4". Таким образом, мои шаги "5" и "8" никогда не будут обновлены, так как к тому времени, когда код сможет обновить их статус, post_save снова сработает из-за изменения статуса шага "2". Как я могу убедиться, что все три ветви обновляются последовательно. Скажем, сначала обновляется шаг 2, шаг 3 и шаг 4. Затем шаг 5, 6 и 7. А затем шаг 8, 9 и 10.

Вот мои модели:

class WorkflowStep(models.Model):
    name = models.CharField(max_length=200)
    workflow = models.ForeignKey('Workflow', null=True, blank=True, on_delete=models.CASCADE)
    step_type = models.ForeignKey('WorkflowStepType', null=True, blank=True, on_delete=models.SET_NULL)
    allowed_status = models.ManyToManyField('WorkflowStepStatus', null=True, blank=True,
                                       related_name='workflowstep_allowed_status')
    default_status = models.ForeignKey('WorkflowStepStatus', null=True, blank=True, on_delete=models.SET_NULL)
    should_recheck = models.BooleanField(default=False)
    trigger_on_new_version = models.BooleanField(default=False)
    status = models.ForeignKey('WorkflowStepStatus', null=True, blank=True, on_delete=models.SET_NULL)
    created_on = models.DateTimeField(auto_now_add=True)
    id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True)

    def __str__(self):
        return self.name + "-" + self.workflow.name


class WorkflowStepPrerequisite(models.Model):
    workflow_step = models.ForeignKey('WorkflowStep', null=False, blank=False, on_delete=models.CASCADE,
                                      related_name='workflowstepprerequiste_workflow_step')
    pre_requisite_step = models.ForeignKey('WorkflowStep', null=True, blank=True, on_delete=models.CASCADE,
                                           related_name='workflowstepprerequiste_pre_requisite_step')
    pre_requisite_step_status = models.ForeignKey('WorkflowStepStatus', null=True, blank=True, on_delete=models.SET_NULL)
    created_on = models.DateTimeField(auto_now_add=True)
    id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, primary_key=True)

    def __str__(self):
        return self.workflow_step.name + "-" + self.workflow_step.workflow.name + "-Prequisite"

Должен ли я в этом случае использовать сигналы? Или я должен использовать модельные методы?

Вернуться на верх