Keystonejs admin ui:查看关系的字段而非ID

时间:2018-10-04 11:56:46

标签: keystonejs

这是一个非常简单的问题:

当我在要设置关联关系的列表中有一个name字段时,该关联关系会正确显示链接文档的名称。例如,在该列表中,我有一个名为business的字段,该字段与具有Business字段的name列表有关系。

Business name shown properly

但是当我的关系是一个没有name字段的列表时,则在管理界面中仅显示id,如下所示:

enter image description here

那显然很不讲究。

如何配置梯形校正以在管理ui中显示特定字段来表示文档?

3 个答案:

答案 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();

Here is the documentation :

  

地图

     

一个将字段映射到特殊列表路径的对象。如果添加了具有该键的字段,则每个路径默认为其键。可映射的路径包括

     

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