Тип связи KeystoneJS, ограничение доступных элементов по значению поля

можно ли ограничить доступные отображаемые параметры в типе отношений KeystoneJS, указав условие значения?

в принципе, модель имеет два набора полей массива, вместо того, чтобы позволить пользователю администратора выбрать любой элемент из поля, я хотел бы ограничить только элементы, которые являются частью определенной коллекции _id.

2 ответов


не уверен, что это именно объект вы ищете, но вы можете указать на Relationship поле как объект, и он будет фильтровать результаты, так что отображаются только те, которые соответствуют.

каждое свойство в filter объект должен быть либо значением для соответствия в связанной схеме, либо динамическим значением, соответствующим значению другого path в схеме (вы префикс пути с :).

для пример:

Пользователей Схемы

User.add({
    state: { type: Types.Select, options: 'enabled, disabled' }
});

Post Schema

// Only allow enabled users to be selected as the author
Post.add({
    author: { type: Types.Relationship, ref: 'User', filter: { state: 'enabled' } }
});

или для динамического примера представьте, что у вас есть role и Posts и Users. Вы только хотите, чтобы соответствовать авторам, которые имеют то же самое role как post.

Пользователей Схемы

User.add({
    userRole: { type: Types.Select, options: 'frontEnd, backEnd' }
});

Post Schema

Post.add({
    postRole: { type: Types.Select, options: 'frontEnd, backEnd' },
    // only allow users with the same role value as the post to be selected
    author: { type: Types.Relationship, ref: 'User', filter: { userRole: ':postRole' } }
});

обратите внимание, что это фактически не реализовано в качестве внутренней проверки он просто реализован в пользовательском интерфейсе администратора. Так что это скорее повышение удобства использования, чем ограничение.


чтобы расширить ответ Джеда, я думаю, что правильным свойством (по крайней мере, в последней версии KeystoneJS 0.2.22) является "фильтры" вместо "фильтр". "фильтр" мне не подходит.