【问题标题】:Process Views outside viewflow.frontend在 viewflow.frontend 之外处理视图
【发布时间】:2017-02-16 14:40:15
【问题描述】:

我想在标准viewflow.frontend 之外集成流程、启动它们等。为此,我一直在尝试创建一个可以开始新流程的简单页面,但一直在努力寻找实现它的方法。

一种方法是定义一个指向url('^start_something, CustomStartView.as_view()) 的URL,其中CustomStartViewviewflow.flow.views.start 继承CreateProcessView。每当我修复一个错误时,这都会导致一个又一个错误。我现在很确定这不是正确的做法,还因为 View 被用作 Flow 类本身的参数,并且可能需要与普通视图不同地使用。

正确的做法是什么?

【问题讨论】:

    标签: django django-viewflow


    【解决方案1】:

    Viewflow 视图需要通过flow_classflow_task 实例进行参数化。因此,您可以包含如下开始视图::

    url('^start/', CreateProcessView.as_view(), {
         'flow_class': MyFlow,
         'flow_task': MyFlow.start})
    

    要添加任务视图 URL 配置,您需要使用 process_pktask_pk 参数

    url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/', ApproveView.as_view(), {
         'flow_class': MyFlow,
         'flow_task': MyFlow.approve
    })
    

    对于每个节点,您还可以启用详细信息和各种操作 URL,例如:

    url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/detail/', DetailTaskView.as_view(), {
         'flow_class': MyFlow,
         'flow_task': MyFlow.approve
    }),
    url('^(?P<process_pk>\d+)/approve/(?P<task_pk>\d+)/cancel/', CancelTaskView.as_view(), {
         'flow_class': MyFlow,
         'flow_task': MyFlow.approve
    }),
    

    所有这些都很麻烦。

    推荐方式

    您可以只包含 Flow.instance.urls,其中包含收集的所有 URL 并准备好包含到 URL 配置中。

    url('^myflow', include(MyFlow.instance.urls, namespace='myflow'))
    

    最后,要启用任务列表视图,您可以手动输入 URL 条目,例如

    url('^myflow/inbox/', TaskListView.as_view(), {
        'flow_class': MyFlow}, name="tasks")
    

    或仅用作viewflow.flow.viewset.FlowViewSet

    myflow_urls = FlowViewSet(MyFlow).urls
    
    urlpatterns = [
        url(r'^myflow/', include(myflow_urls, namespace='myflow'))
    ]
    

    这是将视图流 URL 包含到 django URL 配置中的推荐方法。要自定义该 URL 配置中使用的视图,您可以继承 FlowViewSet 类并在节点定义中提供视图,例如

    class MyFlow(Flow):
        start = flow.Start(detail_view_class=MyDetailTaskView)
    

    对于示例用法,您可以查看 Viewflow 自定义 UI 食谱示例 - https://github.com/viewflow/cookbook/tree/master/custom_ui

    【讨论】:

    • 非常感谢 :) 这正是我所需要的!我之前使用过{'flow_class': Flow},但不知道'flow_task 应该传递什么。我想使用通用 URL 和命名空间会更方便一些,我现在正在使用 :)
    猜你喜欢
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多