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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:30:13