【问题标题】:How to define a unique URL and a custom template for a django ViewFlow Task如何为 django ViewFlow 任务定义唯一的 URL 和自定义模板
【发布时间】:2015-03-04 23:02:40
【问题描述】:

大纲

正如之前关于 stackoverflow 的 question 所述,我正在使用 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)的链接时,她将被重定向到 active 任务。此外,我不确定“分配”是否是强制性的。

谢谢。

【问题讨论】:

    标签: python django workflow django-viewflow


    【解决方案1】:
    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,详细了解如何在任务视图中实现对下一个活动任务的重定向。

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

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

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 2011-10-05
      • 2015-11-06
      • 2013-09-29
      • 2017-02-20
      • 2012-03-05
      相关资源
      最近更新 更多