Directus 9版本:Flow修改数据模型字段未写入Revision历史
解决Directus 9中Flow修改字段不记录修订历史的问题
问题背景
在Directus 9最新版本中,创建了包含title和Random_order字段的Article数据模型,通过Filter类型Flow自动更新Random_order为随机数,功能正常但修订历史未记录该字段的修改内容。
原因分析
Directus默认仅追踪用户通过后台界面操作产生的变更记录,而Flow默认以「系统账户」身份运行,这类系统级操作不会自动触发修订历史的写入。此外,如果字段本身未开启修订跟踪,也会导致变更不被记录。
解决方案
1. 调整Flow的运行身份
编辑目标Filter Flow:
- 找到「运行方式(Run As)」配置项,将默认的「系统(System)」切换为一个具备Article模型编辑权限的普通用户账户
- 确保该用户账户拥有「修订记录」相关权限(可在角色权限中开启「Revisions」的创建权限)
- 保存Flow后,后续运行时的变更会以该用户身份被记录到修订历史中
2. 开启字段的修订跟踪
进入Article数据模型的字段设置:
- 找到
Random_order字段,进入编辑界面 - 开启「修订记录(Revisions)」选项(勾选「跟踪此字段的变更」)
- 保存字段配置后,该字段的所有合法变更都会被纳入修订历史
3. 手动调用API创建修订记录(兜底方案)
如果必须使用系统账户运行Flow,可在更新步骤后添加「自定义代码」步骤,手动生成修订记录:
const { Directus } = require('@directus/sdk'); // 初始化SDK客户端 const directus = new Directus(process.env.DIRECTUS_URL, { auth: { staticToken: process.env.DIRECTUS_STATIC_TOKEN } }); // 获取当前更新的条目ID和新值 const itemId = $last.id; const newRandomVal = $last.Random_order; // 获取更新前的字段值 const oldItem = await directus.items('Article').readOne(itemId, { fields: ['Random_order'] }); // 创建修订记录 await directus.revisions.createOne({ collection: 'Article', item: itemId, action: 'update', payload: { before: { Random_order: oldItem.Random_order }, after: { Random_order: newRandomVal } } });
- 需在Flow的环境变量中配置
DIRECTUS_URL和DIRECTUS_STATIC_TOKEN(令牌需具备修订记录创建权限)
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

