2

大纲

如上一个关于 stackoverflow 的问题所述,我正在使用ViewFlow.io实现工作流。

该用例是关于使用 Django-Viewflow 库收集作者信息和版权。每次将作者添加到书籍时,都应启动工作流。

myFlow/flows.py

from viewflow import flow
from viewflow.base import this, Flow
from viewflow.contrib import celery
from viewflow.views import StartProcessView, ProcessView
from . import models, tasks

class AuthorInvitationFlow(Flow):
    process_cls = models.AuthorInvitation

    start = flow.Start(StartProcessView) \
        .Permission(auto_create=True) \
        .Next(this.notify)

    notify = celery.Job(tasks.send_authorship_request) \
        .Next(this.approve)

    approve = flow.View(AuthorConfirmView) \
        .Permission(auto_create=True) \
        .Next(this.check_approve)

    check_approve = flow.If(cond=lambda p: p.confirmed) \
        .OnTrue(this.send) \
        .OnFalse(this.end)

    send = celery.Job(tasks.send_authorship) \
        .Next(this.end)

    end = flow.End()

我的问题

1 - 创建自定义 updateView 时,如何为特定任务指定自定义模板?

使用模板或模板名称不起作用。

class AuthorConfirmView(TaskViewMixin, UpdateView):
    template_name = 'template_1.html'
    fields = ["confirmed"]    

    def get_object(self):
        return self.activation.process

2-如何/什么是每个流程实例拥有唯一 url 的最佳实践。当作者(又名用户)访问流程(工作流)实例的链接(例如http://mybook/process/11122)时,她将被重定向到活动任务。此外,我不确定“分配”是否是强制性的。

谢谢。

4

1 回答 1

0
  1. 是的,这可能是奇怪的行为,需要修复。

目前TaskViewMixin通过以下方式搜索模板

return ('{}/{}/{}.html'.format(app_label, flow_label, flow_task.name),
        '{}/{}/task.html'.format(app_label, flow_label),
        'viewflow/flow/task.html')
  1. 在一般情况下,工作流不会假设当前只有一个活动任务可用。但是当您以某种方式选择正确的任务实例时,您可以调用 get_task_url 方法

    task.flow_task.get_task_url(task, url_type='guess', user=request.user)

您可以viewflow.views.base.get_task_url在任务视图中查看有关如何在下一个活动任务上实现重定向的详细信息。

分配是强制性的,您可以在文档中的流程 Task() 的状态图中看到。这可以防止不同用户同时执行任务。在其他情况下,两个用户可以启动相同的任务,但只有一个用户能够保存其工作。

您可以实现具有不同状态的自定义激活类,也可以通过将 .Assign(lambda process: return_some_user()) 添加到任务声明中来自动将任务分配给用户

于 2015-03-06T11:56:34.837 回答