Strapi:根据内容类型中其他字段的值自动填充字段值

问题描述 投票:0回答:2

Strapi 版本:v4 操作系统:macOS 数据库:MySQL 节点版本:16.15 NPM版本:5.8.8

我正在尝试根据其他字段中的值填充字段。 示例:我的内容类型包含字段 city = Mumbai 和 Country = India,现在我需要第三个字段,称为 market,其值应为 Mumbai - India(即城市字段的值 +“-”+国家/地区字段的值)。

我对 Strapi 比较陌生,仍在探索该工具,有人可以帮我吗?

npm content-management-system strapi
2个回答
5
投票

借助 Strapi 的Model Lifecyle Hooks,实现这一点非常简单。

第1步:
首先,通过

city
county
market
Content-Type builder
字段添加到您的集合类型。

第2步:
现在,您需要将该字段设置为

read-only
,以确保没有人可以通过管理 UI 手动填充该字段。您可以通过访问收藏中的任何条目,然后单击右侧窗格中的
Configure the view
选项来完成此操作。

第三步:
接下来,单击

market
字段的编辑图标。您将看到一个类似于以下屏幕截图的弹出窗口。将该字段设为可编辑
false
,然后单击
finish
。完成此操作后,请确保单击页面右上角显示的
Save
按钮以永久保存更改。

第四步:
接下来,覆盖模型的

beforeCreate
beforeUpdate
生命周期挂钩,以在创建/更新条目时自动填充市场价值。为此,您必须在以下文件夹中创建一个生命周期.js 文件:
./api/[api-name]/content-types/[content-type-name]/

假设您的收藏名称是

Student

// src/api/student/content-types/student/lifecycles.js

module.exports = {
    beforeCreate(event) {
    if (event.params.data.city && event.params.data.country) {
      const { city = "", country = "" } = event.params.data;
      event.params.data.market = city + " - " + country;
    }
  },

  beforeUpdate(event) {
    if (event.params.data.city && event.params.data.country) {
      const { city = "", country = "" } = event.params.data;
      event.params.data.market = city + " - " + country;
    }
  },
};

第五步:
就是这样!重新启动您的 Strapi 服务器并尝试在您的集合中创建或更新新条目。它应该根据

market
city
值自动填充
country
值。


0
投票

我尝试过这个,但在我的情况下钩子没有触发。知道我做错了什么吗?

我有一个非常基本的应用程序。 MacO、STRAPI 版本 - v4.13.7 和 NODE 版本 -v18.18.0

lifecycles.js image

© www.soinside.com 2019 - 2024. All rights reserved.