使用ViewFlow创建工作流执行makemigrations报错:AttributeError
我是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版本不兼容+代码结构不符合当前版本规范导致的,具体修复步骤如下:
统一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调整流程节点的定义位置
流程的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() # 移至类内部修正字段不一致问题
你的FormInstanceProcess模型仅定义了asset字段,但Start节点中指定了fields=["asset", "attributes"],这会导致后续运行报错,需删除attributes或在模型中添加对应字段。确保使用稳定版ViewFlow
运行pip show viewflow查看当前版本,若为测试版或旧版本,升级至官方稳定版:pip install --upgrade viewflow
完成以上修改后,重新执行python manage.py makemigrations和python manage.py migrate即可正常生成迁移文件。
内容的提问来源于stack exchange,提问作者Pooja Kumari

