Запрос объектов, связанных с потоками
У меня есть две модели: WorkflowStep и WorkflowStepPR. (PR означает предварительное условие).
class WorkflowStep(BaseModel):
name = models.CharField(max_length=200)
workflow = models.ForeignKey('Workflow', on_delete=models.CASCADE)
allowed_status = models.ManyToManyField('WorkflowStepStatus', related_name='workflow_step')
default_status = models.ForeignKey('WorkflowStepStatus', blank=True, null=True, on_delete=models.SET_NULL)
recheck_on_new_version = models.BooleanField(default=False)
watch_folder = models.BooleanField(default=False)
def __str__(self):
return self.name
class Meta:
ordering = ['created_on']
class WorkflowStepPR(BaseModel):
PR_for = models.ForeignKey('WorkflowStep', related_name='PR_for', on_delete=models.CASCADE)
PR_step = models.ForeignKey('WorkflowStep', related_name='as_PR_step', on_delete=models.CASCADE)
PR_step_status = models.ForeignKey('WorkflowStepStatus', on_delete=models.CASCADE)
def __str__(self):
return "{} 's PR - {}".format(self.PR_for, self.PR_for.workflow)
class Meta:
ordering = ['created_on']
Каждый WorkflowStep имеет предварительное условие, которое поддерживается через модель WorkflowStepPR. Теперь предположим, что у меня есть следующий сценарий:
Каждый квадрат представляет собой этап рабочего процесса. Каждая стрелка, соединяющая два поля, показывает связь пререквизита (т.е. поле справа от стрелки зависит от поля слева от стрелки). Например: "B" является предварительным условием для "C" и "D".
Я хочу найти все шаги, которые прямо или косвенно связаны с шагом B.
Прямое отношение : C, D Косвенно связанные: E (связано с C), G (связано с C), H (связано с D), J (связано с H)
Как написать запрос, чтобы получить это?
Я пробовал следующее
@receiver(pre_save, sender=WorkflowInstanceStep)
def status_of_workflowInstanceStep_updated(sender, instance,**kwargs):
if instance.id is None:
pass
else:
workflow_step = instance.workflow_step
dependent_steps = workflow_step.as_PR_step.all()
print(dependent_steps)
Но это возвращает только шаг C и шаг D в наборе запросов.