При использовании 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 4

1 ответ:

Вы можете создать схему на основе модели:

from plone.supermodel import model

class IMySchema(model.Schema):
    model.load('path/to/model.xml')

Любые поля, определенные в схеме Python, будут иметь приоритет над полями с таким же именем, определенными в модели.

Модель загружается в конце этапа настройки ZCML. Это означает, что есть оговорка: Вы не можете ссылаться на поле из модели в области модуля в любом месте. Например, регистрация значения по умолчанию с помощью формы@.default_value (IMySchema['foo']) декоратор не будет работать, потому что поле еще не было загружается еще в то время, когда декоратор выполняется во время импорта.