如何使用Directus Flows在创建记录时复制列绝对值到同集合另一列
结论
完全可以通过Directus自带的Flows功能实现该需求,无需开发自定义扩展,按步骤配置即可生效。
具体配置步骤
1. 新建Flow并配置触发器
- 进入Directus后台「设置 - Flows」页面,新建空白Flow
- 触发器类型选择
事件钩子(Event Hook) - 钩子类型选择
过滤器(Filter),触发事件勾选items.create,绑定你存储负数值的对应集合 - 该触发时机为数据库写入操作执行前,可直接修改待入库的数据,无需额外发起更新请求,性能最优。
2. 添加数据处理逻辑
在触发器后新增「运行脚本(Run Script)」操作,将以下代码粘贴到脚本编辑区,替换字段名为你集合里的实际字段名即可:
module.exports = async function(data) { // 替换为实际字段名:negative_col是存负数的源字段,abs_col是存绝对值的目标字段 const sourceVal = data.$payload.negative_col; if (sourceVal !== null && sourceVal !== undefined) { data.$payload.abs_col = Math.abs(Number(sourceVal)); } return data; }
可选配置(操作执行后触发模式)
如果你选择在记录创建完成后触发逻辑,可将钩子类型改为动作(Action)、触发时机选After,后续新增「更新数据(Update Data)」操作:
- 筛选条件匹配刚创建记录的主键ID(从触发器返回的payload中获取)
- 将目标字段赋值为源字段的绝对值即可
该模式效果和前置触发一致,仅会多产生一次数据库更新操作。
注意:配置前请确认两个字段均已在集合中创建、类型为数值类(float/decimal/integer均可),同时Flow的运行身份拥有对应集合的写入权限。
配置完成后保存启用Flow即可生效,新建记录时源字段填入-45.20这类负数值,目标字段会自动写入对应的绝对值45.20,完全匹配需求。
内容的提问来源于stack exchange,提问作者bcsta
相关产品推荐
相关产品推荐

