Обновление экземпляров модели в определенном порядке
Я работаю над приложением на django. У меня есть поток процесса, в котором есть шаги и их соответствующий статус. У меня есть модель для шагов. Ниже приведена моя диаграмма потока
Как только статус шага 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"
Должен ли я в этом случае использовать сигналы? Или я должен использовать модельные методы?
