这是一个非常简单的问题:
当我在要设置关联关系的列表中有一个name
字段时,该关联关系会正确显示链接文档的名称。例如,在该列表中,我有一个名为business
的字段,该字段与具有Business
字段的name
列表有关系。
但是当我的关系是一个没有name
字段的列表时,则在管理界面中仅显示id,如下所示:
那显然很不讲究。
如何配置梯形校正以在管理ui中显示特定字段来表示文档?
答案 0 :(得分:3)
梯形失真校正仅将name
字段显示为文档标题或关系摘要。
但是有一个简单的解决方案,可以将自定义字段用作name
字段:map
选项。创建模型时,将要显示的字段映射到name
字段。
例如,我有本地化的文本字段,并且我想默认显示英文版本:
const LocalizedText = new keystone.List('LocalizedText', {
map: { name: 'en' } // <=== This is the solution
});
LocalizedText.add({
fr: { type: String },
en: { type: String }
});
LocalizedText.register();
地图
一个将字段映射到特殊列表路径的对象。如果添加了具有该键的字段,则每个路径默认为其键。可映射的路径包括
name-包含项目名称的字段,用于在管理界面中显示。
答案 1 :(得分:2)
我知道这是一个古老的问题,但是有相同的问题,我在这里离开了我如何在Keystone 5中修复它,希望它能对其他人有所帮助。
创建列表时,只需使用要显示的字段名称(而不是ID)添加labelField。
keystone.createList('User', {
fields: {
name: { type: Text },
email: { type: Text },
},
labelField: 'name',
});
文档here
答案 2 :(得分:0)
自定义标签示例:
const Post = {
fields: {
title: { type: Text },
// other fields
},
labelResolver: item => item.title,
};
使用更多逻辑:
const Post = {
fields: {
title: { type: Text },
status: {
type: Select,
defaultValue: 'draft',
options: [
{ label: 'Draft', value: 'draft' },
{ label: 'Published', value: 'published' },
],
},
// and the rest of the fields too
},
labelResolver: item => `${item.status === 'draft' ? 'DRAFT - ' : ''}` + item.title,
};
使用查询结果:
const Post = {
fields: {
author: {
type: AuthedRelationship,
ref: 'User',
isRequired: true,
},
// and the rest of the fields too
},
labelResolver: async item => {
const { data } = await keystone.executeGraphQL({
query: `query {
User(where: {id: "${item.author}" }) {
name
}
}`,
});
return `${item.status === 'draft' ? 'DRAFT ' : ''}` + item.title + ` (${data.User.name})`;
},
};
来自 keystoneJs 博客的详细信息:
Using customized label