Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何跟踪线性工作流中的步骤_Python_Django_Django Models - Fatal编程技术网

Python 如何跟踪线性工作流中的步骤

Python 如何跟踪线性工作流中的步骤,python,django,django-models,Python,Django,Django Models,我有一个工作流中任务的模型。该任务有一个ManyToMany字段,允许用户添加可以批准任务中每个步骤的批准者 class Task(models.Model): approvers = models.ManyToManyField( get_user_model(), through='TaskStep' ) 我使用了一个作为中介的模型来跟踪每个批准的顺序,目的是在一个批准者签署任务时,将任务线性地从一个批准者传递到下一个批准者: class T

我有一个工作流中任务的模型。该任务有一个
ManyToMany
字段,允许用户添加可以批准任务中每个步骤的批准者

class Task(models.Model):
    approvers = models.ManyToManyField(
        get_user_model(),
        through='TaskStep'
    )
我使用了一个作为中介的模型来跟踪每个批准的顺序,目的是在一个批准者签署任务时,将任务线性地从一个批准者传递到下一个批准者:

class TaskStep(OrderedModel):

    approver = models.ForeignKey(
        get_user_model(), null=True, on_delete=models.SET_NULL
    )
    task = models.ForeignKey(Task, null=True, on_delete=models.SET_NULL)
    order_with_respect_to = 'task'
    status = models.BooleanField()
假设每个步骤都是每个审批人在
approvers
字段中的一个对/错确认,那么跟踪任务审批的任务步骤最简单的方法是什么

例如,我是否向
任务
添加一个字段,如
步骤
,并尝试通过
\uu初始化
审批人
多个字段转换为列表

用例示例

  • 用户定义了一个任务,在ManyToMany字段中列出了4个审批人
  • 这些审批人的顺序通过OrderedModel设置。
    • 例如,批准人1-->批准人2-->批准人3-->批准人4
  • 然后,工作流按照定义的顺序依次将任务传递给每个审批人。每个审批人的
    TaskStep
    状态为
    False
    ,直到他们确认并将其设置为
    True
我需要一种方法来跟踪任务执行的步骤,以便我可以将其提交给相应的审批人(用户)。

编辑:

具体地说,我需要一个解决方案,这样我就可以为给定的用户创建一个查询,返回他们被分配为当前(活动)步骤的所有任务。我认为最好的方法可能是在任务模型中创建一个字段,并对其进行更新以返回与该步骤相关联的用户,但我不确定如何执行此操作。

我们可以通过以下方法获得第一个任务:
status=False

next_step = TaskStep.objects.filter(task=my_task, status=False).first()
OrderedModel
有一个
order
字段,并按该字段排序,因此
.first()
将返回订单中的第一个字段。如果不存在这样的
TaskStep
,它将返回
None


因此,此
任务步骤
引用了需要批准的下一个审批人。

由于它是M2M型号,一个
任务
可以有零个、一个或多个
任务步骤
。对于
任务
状态
,是否总是(最多)有一个
任务步骤
,可以有零个、一个或多个审批人(任务步骤)。所有步骤都是错误的,直到它们被批准,然后任务完成。请参见编辑用例示例。谢谢。有没有办法针对模型记录本身保存此值?例如,我想为有活动任务的用户创建一个收件箱,因此需要反向查找他们在当前步骤中的位置。例如,我在想,如何对用户运行查询以显示他们在当前步骤中的所有任务(审批者)?@alias51:hmm。。。这是一个更难的问题。这可能需要一个子查询。是否最好在
Task
中为步骤创建
IntegerField
,然后在init上设置当前步骤/用户?
my_task.taskstep_set.filter(status=False).first()