在keystone.js管理界面中显示其他模型(集合)中的字段?

时间:2015-02-10 09:42:00

标签: node.js mongodb mongoose keystonejs

我有两个模型

/**
 * Page Model
 * =============
 */

var Page = new keystone.List('Page');

Page.add({
    name: { type: String, required: true },
    pid: { type: String, required: true , default:"123" },
    phone: { type: String },
    keyword : {type: Types.Relationship, ref: 'Keyword' , many: true},
    searchvol : {type: Types.Relationship, ref: 'Keyword' , many: true},
    pageType: { type: Types.Select, options: [
        { value: 'message', label: 'Just leaving a message' },
        { value: 'question', label: 'I\'ve got a question' },
        { value: 'other', label: 'Something else...' }
    ] },
    createdAt: { type: Date, default: Date.now }
});

Page.relationship({ path: 'keywords', ref: 'Keyword',    refPath: 'keyword' });
Page.relationship({ path: 'keywords', ref: 'Keyword',    refPath: 'searchvol' });

关键词模型

/**
 * Keyword Model
 * =============
 */

var Keyword = new keystone.List('Keyword');

Keyword.add({
    //name: { type: String, required: true },
    searchvol: { type: String },
    keywordType: { type: Types.Select, options: [
        { value: 'message', label: 'brand' },
        { value: 'question', label: 'exact match' },
        { value: 'other', label: 'Something else...' }
    ] },
    createdAt: { type: Date, default: Date.now }
});

我想在管理界面中包含搜索量,以便我可以使用它进行排序和过滤

然而它似乎只能包含名称字段,如果我删除该字段,它只显示id。

解决这个问题的唯一方法是构建一个处理我的“联接”的自定义crud界面,或者有一种方法可以使它与当前设置一起使用。

以下是文档的链接,我在其中找到了有关如何执行此操作的一些详细信息。 http://keystonejs.com/docs/database/#relationships

1 个答案:

答案 0 :(得分:3)

@RaedMarji,Keystone总是使用name字段来显示引用的关系。但是,在像您这样的情况下,如果您没有name字段,则可以将现有字段映射为模型名称。

只需更新您的列表定义,如下所示:

var Keyword = new keystone.List('Keyword', {
    map: { name: 'searchvol' }
});