查询螺纹相关对象

发布于 2025-02-11 21:33:08 字数 1938 浏览 1 评论 0原文

我有两个型号: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)有关对于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)

,但这只是返回QuerySet中的步骤C和步骤D。

I have two models : WorkflowStep and WorkflowStepPR. (PR stands for prerequisite).

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']

Every WorkflowStep has a prerequisite which is maintained via WorkflowStepPR model. Now assume that I have the below scenario:

enter image description here

Every box represents a workflow step. Every arrow connecting two boxes shows pre requisite relation (i.e. box on the right of the arrow is dependent on the box on the left of the arrow). For example : "B" is the pre requisite for "C" and "D".

I want to find all the steps which are directly or indirectly related to Step B.

Directly related : C, D

Indirectly Related: E (related to C), G (related to C), H(related to D), J (related to H)

How can I write a query the to get this?

I have tried the following

@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)

But this returns just the step C and Step D in the queryset.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文