You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ViewFlow创建工作流执行makemigrations报错:AttributeError

问题:ViewFlow执行makemigrations时出现AttributeError: module 'viewflow.nodes' has no attribute 'Obsolete'

我是ViewFlow新手,正尝试创建工作流,已编写flows.py、models.py、helloworld/urls.py代码(代码如下)。执行python manage.py makemigrations命令时,出现错误:AttributeError: module 'viewflow.nodes' has no attribute 'Obsolete',请问问题出在哪里或遗漏了什么?

代码文件

flows.py

from viewflow import rest

from viewflow.base import this, Flow

from viewflow.rest import flow
from viewflow.rest.views import CreateProcessView

from .models import FormInstanceProcess


@rest.register
class FormFlow(Flow):
    process_class = FormInstanceProcess

    create_form = (
        flow.Start(CreateProcessView, fields=["asset", "attributes"])
        .Available(
            lambda user: True
        )
        .Next(this.end_process)
    )

end_process = flow.End()

models.py

from django.db import models
from django.contrib.auth import get_user_model

from viewflow.models import Process

User = get_user_model()


class FormInstanceProcess(Process):
    asset = models.CharField(max_length=236)

helloworld/urls.py

from django.urls import path, include
from viewflow.rest.viewset import FlowViewSet
from .flows import FormFlow

form_flow_urls = FlowViewSet(FormFlow).urls


app_name = "helloworld"
urlpatterns = [
    path("workflow/", include((form_flow_urls, "form"), namespace="form_flow")),

]

问题原因及解决方法

这个错误核心是ViewFlow版本不兼容+代码结构不符合当前版本规范导致的,具体修复步骤如下:

  1. 统一ViewFlow REST模块的导入路径
    你当前混合导入了viewflow.base和viewflow.rest的内容,REST工作流应统一使用viewflow.rest下的Flow和this:
    修改flows.py的导入部分:

    from viewflow import rest
    from viewflow.rest import this, Flow  # 替换原viewflow.base的导入
    from viewflow.rest import flow
    from viewflow.rest.views import CreateProcessView
    from .models import FormInstanceProcess
    
  2. 调整流程节点的定义位置
    流程的End节点必须定义在Flow类内部,不能放在全局作用域:
    修改flows.py的流程结构:

    @rest.register
    class FormFlow(Flow):
        process_class = FormInstanceProcess
    
        create_form = (
            flow.Start(CreateProcessView, fields=["asset"])  # 注意:模型中无attributes字段,需移除
            .Available(lambda user: True)
            .Next(this.end_process)
        )
    
        end_process = flow.End()  # 移至类内部
    
  3. 修正字段不一致问题
    你的FormInstanceProcess模型仅定义了asset字段,但Start节点中指定了fields=["asset", "attributes"],这会导致后续运行报错,需删除attributes或在模型中添加对应字段。

  4. 确保使用稳定版ViewFlow
    运行pip show viewflow查看当前版本,若为测试版或旧版本,升级至官方稳定版:

    pip install --upgrade viewflow
    

完成以上修改后,重新执行python manage.py makemigrations和python manage.py migrate即可正常生成迁移文件。

内容的提问来源于stack exchange,提问作者Pooja Kumari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 10:17:16