我有一个工作流中的任务模型。该任务具有一个ManyToMany
字段,允许用户添加可以批准任务中每个步骤的批准者。
class Task(models.Model):
approvers = models.ManyToManyField(
get_user_model(),
through='TaskStep'
)
我使用OrderedModel作为中介模型来跟踪每个批准的顺序,目的是在他们签署任务时将任务从一个批准者线性传递给下一个批准者:
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
字段中每个批准者的对/错确认,最简单的方法是跟踪任务批准在哪个TaskStep上进行?
例如是否要像Task
一样向Step
添加一个字段,并尝试通过approvers
将__init__
ManyToMany字段变成一个列表?
用例示例:
TaskStep
状态为False
,直到他们确认为止,并将其设置为True
我需要一种方法来跟踪任务正在执行的步骤,以便将其定向到适当的批准人(用户)。
编辑:
具体地说,我需要一个解决方案,以便可以为给定的用户创建查询,该查询返回作为当前(活动)步骤分配给他们的所有任务。我认为最好的方法可能是在Task模型中创建一个字段,并对其进行更新以返回与该步骤相关的用户,但是我不确定如何执行此操作。
答案 0 :(得分:0)
我们可以获得status=False
的 first 任务:
next_step = TaskStep.objects.filter(task=my_task, status=False).first()
或通过 my_task
本身:
my_task.taskstep_set.filter(status=False).first()
OrderedModel
有一个order
字段,并按该字段排序,因此.first()
将返回订单中的第一个字段。如果不存在这样的None
,它将返回TaskStep
。
因此,此TaskStep
引用了需要批准的下一个批准人。