介绍了实验模式,对象支持plone.autoform和plone.app.z3form。
jyu.formwidget.object的Python项目详细描述
schema.object变得简单
这个包介绍了一个支持 z3c.form上的对象字段(zope.schema.object)和 希望将基于模式的分层数据保存在 物体。
我不能说,为什么有人愿意这样做(而不是映射数据 但我希望这个包能提供一些例子, 如何使对象字段与plone.autoform和plone's一起工作 kss验证。
此套餐
- 为iaautoextensibleform 中的对象小部件提供isubformfactory
- 为对象字段实现简单的plone样式input和display小部件
- 引入重构的kss验证集成,支持对象字段
- monkeypatchesplone.z3cform的小部件遍历以支持对象小部件
- 用侵入性较小的方法覆盖objectwidget的默认dataconverter
- 提供一个简单的抽象工厂类来存储对象字段 值为simpleitem-属性。
注意,这个包依赖于plone.app.z3cform和 iploneformlayer它注册。
使用示例
首先,我们定义了一个简单的模式,我们希望将其作为其他模式的一部分重新使用:
from zope import schema from zope.interface import invariant, Invalid from plone.directives import form from zope.i18nmessageid import MessageFactory as ZopeMessageFactory _= ZopeMessageFactory("my.package") class StartBeforeEnd(Invalid): __doc__ = _(u"The start or end date is invalid") class IPeriod(form.Schema): start = schema.Date( title=_(u"period_start_label", default=u"Period began"), required=True ) end = schema.Date( title=_(u"period_end_label", default=u"Period ended"), required=True ) @invariant def validateStartEnd(data): if data.start is not None and data.end is not None: if data.start > data.end: raise StartBeforeEnd(\ _(u"The start date must be before the end date."))
然后定义主模式,它重新使用第一个模式:
class IWorkPeriod(form.Schema): title = schema.TextLine( title=_(u"work_title_label", default=u"Title"), required=True ) description = schema.TextLine( title=_(u"work_description_label", default=u"Description"), required=False ) period = schema.Object( title=_(u"work_period", default=u"Period"), schema=IPeriod, required=True )
最后,我们注册一个对象因子,它创建simpleitem 匹配z3c.form的架构以验证并存储为 正在创建或编辑的实际对象的属性:
from five import grok from zope.interface import Interface from z3c.form.interfaces import IObjectFactory from jyu.formwidget.object.factory import AbstractBaseFactory from my.package.schemas import IPeriod class PeriodFactory(AbstractBaseFactory, grok.MultiAdapter): grok.provides(IObjectFactory) grok.name("my.package.schemas.IPeriod") grok.adapts(Interface, Interface, Interface, Interface)
当然,要测试它,您还应该定义和 基于主模式注册新的内容类型(例如 灵巧)。
变更日志
1.0B7-2011-02-23
- 将默认情况下作为属性字段工作的数据管理器修复为 修复plone.app.textfield和plone.namedfile的问题。
1.0b6-2011-01-28
- 添加了关于plone.app.textfield和plone.namedfile问题的说明。
1.0b5-2011-01-24
- 合并了从plone.app.z3form(0.5.3)到validation.py的更改。
1.0b4-2011-01-19
- 修复了数据管理器在初始化对象属性时 已经不存在了。
1.0B3-2011-01-07
- 修复了用于处理子对象字段的验证器和数据转换器。
1.0b2-2010年12月23日
- 重构为使用自定义数据转换器和数据管理器而不是 与z3c.form一起提供的那个。
1.0b1-2010年12月20日
- 初始版本