Тип связи 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) является "фильтры" вместо "фильтр". "фильтр" мне не подходит.