При использовании Dexterity можно ли комбинировать типы, управляемые моделью, с типами, управляемыми схемой?
Как создать гибридный тип (т. е. тип, который сохраняет удобство управляемых моделью типов, но использует преимущества управляемых схемой типов по мере необходимости)?
Мои самые последние исследования привели меня к моделируемым типам ловкости как наиболее удобному подходу для развития ловкости. Я следил за этой статьей: http://developer.plone.org/reference_manuals/external/plone.app.dexterity/model-driven-types.html в отличие от управляемых схемой типов документально здесь: http://developer.plone.org/reference_manuals/external/plone.app.dexterity/schema-driven-types.html. Гибридный подход возник из проблемы, с которой я столкнулся со ссылками, которые до сих пор не ведут себя предсказуемо, используя управляемые моделью типы. Я ожидаю, что управляемые схемой определения дадут мне более точный контроль в подобных ситуациях.1 ответ:
Вы можете создать схему на основе модели:
from plone.supermodel import model class IMySchema(model.Schema): model.load('path/to/model.xml')
Любые поля, определенные в схеме Python, будут иметь приоритет над полями с таким же именем, определенными в модели.
Модель загружается в конце этапа настройки ZCML. Это означает, что есть оговорка: Вы не можете ссылаться на поле из модели в области модуля в любом месте. Например, регистрация значения по умолчанию с помощью формы@.default_value (IMySchema['foo']) декоратор не будет работать, потому что поле еще не было загружается еще в то время, когда декоратор выполняется во время импорта.