The label of the field
Type of input
Field API key
Whether the field needs to be multilanguage or not
Optional field validations
Field appearance details, plugin configuration and field add-ons
Ordering index
Field hint
Default value for Field. When field is localized accepts an object of default values with site locales as keys
Whether deep filtering for block models is enabled in GraphQL or not
Fieldset linkage
The following examples are available:
This is a complete example for creating a new localized Single-line string field:
import { buildClient } from '@datocms/cma-client-node';async function run() {const client = buildClient({ apiToken: '<YOUR_API_TOKEN>' });const modelIdOrApiKey = 'blog_post';const field = await client.fields.create(modelIdOrApiKey, {label: 'Title',field_type: 'string',api_key: 'title',localized: true,validators: {required: {}},appearance: {editor: 'single_line',parameters: {heading: false},addons: [{id: '1234',field_extension: 'lorem_ipsum',parameters: {}}]},position: 1,hint: 'This field will be used as post title',default_value: {en: 'A default value',it: 'Un valore di default'},deep_filtering_enabled: true,fieldset: null});console.log(field);}run();
{id: 'Pkg-oztERp6o-Rj76nYKJg',label: 'Title',field_type: 'string',localized: true,default_value: {en: 'A default value',it: 'Un valore di default'},api_key: 'title',hint: 'This field will be used as post title',validators: {required: {}},appearance: {editor: 'single_line',parameters: {heading: false},addons: [{id: '1234',field_extension: 'lorem_ipsum',parameters: {}}]},position: 1,deep_filtering_enabled: true,item_type: {type: 'item_type',id: 'DxMaW10UQiCmZcuuA-IkkA'},fieldset: null}
In this example:
client.itemTypes.create()
method, making sure to set the modular_block
attribute to true
— this tells the API that they're in fact block models, and not regular models;rich_text_blocks
validator:import { buildClient } from '@datocms/cma-client-node';async function run() {const client = buildClient({ apiToken: '<YOUR_API_TOKEN>' });const modularBlock1 = await client.itemTypes.create({name: 'Modular Block 1',api_key: 'modular_block1',modular_block: true,});const modularBlock2 = await client.itemTypes.create({name: 'Modular Block 2',api_key: 'modular_block2',modular_block: true,});const itemTypeId = '1234';const field = await client.fields.create(itemTypeId, {label: 'Content',field_type: 'rich_text',api_key: 'content',validators: {rich_text_blocks: {item_types: [modularBlock1.id, modularBlock2.id],},},});console.log(field);}run();
Structured Text fields support both embedded block records and links to other regular records.
For DatoCMS, a block model is just like a regular model, so we'll create them with client.itemTypes.create()
, passing the modularBlock
property to true
:
In this example:
client.itemTypes.create()
method, making sure to set the modular_block
attribute to true
— this tells the API that they're in fact block models, and not regular models;structured_text_blocks
validator, and the linkable record models in the structured_text_links
validator:import { buildClient } from '@datocms/cma-client-node';async function run() {const client = buildClient({ apiToken: '<YOUR_API_TOKEN>' });const modularBlock1 = await client.itemTypes.create({name: 'Modular Block 1',api_key: 'modular_block1',modular_block: true,});const modularBlock2 = await client.itemTypes.create({name: 'Modular Block 2',api_key: 'modular_block2',modular_block: true,});const itemTypeId = '1234';const field = await client.fields.create(itemTypeId, {label: 'Structured content',field_type: 'structured_text',api_key: 'content',validators: {structured_text_blocks: {item_types: [modularBlock1.id, modularBlock2.id],},structured_text_links: {item_types: [itemTypeId],},},});console.log(field);}run();