在Keystone管理列表视图中,方便的下载链接导出CSV文件中的所有列表项,但是,如果某些字段属于关系类型,则导出的CSV包含Mongo ObjectID而不是nmeaningful字符串(名称,标题等)这将是有用的。
如何强制ObjectIDs被另一个字段映射/替换?
答案 0 :(得分:1)
Keystone具有未记录的功能,允许您创建自己的自定义CSV导出功能。此功能已于4月添加(请参阅KeystoneJS Issue #278)。
您需要做的就是向名为toCSV
的架构添加方法。当指定为此方法的参数时,Keystone将注入以下任何依赖项。
- req (current express request object)
- user (currently authenticated user)
- row (default row data, as generated without custom toCSV())
- callback (invokes async mode, must be provided last)
例如,您可以使用Mongoose Model.Populate方法将任何关系字段的Object Ids替换为您想要的任何数据。
假设您有一个Post
列表author
字段Types.Relationship
到另一个列表(假设为User
),其中包含name
字段。您可以通过执行以下操作,将author
对象ID替换为作者姓名(来自User
列表)。
Post.schema.methods.toCSV = function(callback) {
var post = this,
rtn = this.toJSON();
this.populate('author', function() {
rtn.author = post.author.name; // <-- author now has data from User list
callback(null, rtn);
});
};
对于以.toCSV()
作为上下文返回的每个文档,将调用 Model
。当异步使用时(如上所述),您应该通过将其作为回调的第二个参数传递来返回新CSV数据的JSON表示。同步使用它时,只需返回更新的JSON对象。