介绍了实验模式,对象支持plone.autoform和plone.app.z3form。

jyu.formwidget.object的Python项目详细描述


schema.object变得简单

这个包介绍了一个支持 z3c.form上的对象字段(zope.schema.object)和 希望将基于模式的分层数据保存在 物体。

我不能说,为什么有人愿意这样做(而不是映射数据 但我希望这个包能提供一些例子, 如何使对象字段与plone.autoform和plone's一起工作 kss验证。

此套餐

  • iaautoextensibleform
  • 中的对象小部件提供isubformfactory
  • 为对象字段实现简单的plone样式inputdisplay小部件
  • 引入重构的kss验证集成,支持对象字段
  • monkeypatchesplone.z3cform的小部件遍历以支持对象小部件
  • 用侵入性较小的方法覆盖objectwidget的默认dataconverter
  • 提供一个简单的抽象工厂类来存储对象字段 值为simpleitem-属性。

注意,这个包依赖于plone.app.z3cformiploneformlayer它注册。

使用示例

首先,我们定义了一个简单的模式,我们希望将其作为其他模式的一部分重新使用:

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.textfieldplone.namedfile的问题。

1.0b6-2011-01-28

  • 添加了关于plone.app.textfieldplone.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日

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在war文件中的WEBINF外部创建配置属性文件   点击按钮后java应用程序崩溃   java如何在两个纬度和经度点之间推进X距离(米)?   active directory Java LDAP将组添加到用户问题错误代码53将\u不\u执行   java以设定的时间间隔执行方法的最有效方法?   在jsf中使用不同bean的java策略   java通用API接口,避免API爆炸   使用for循环初始化javajson数组   排序使用Java高效地将排序后的ArrayList放入排序后的数据结构中,并查找小于x的数字量   oracle如何将动态值传递给java serlvet?   java既不是setContentPane()也不是getContentPane()。add()有效   验证如何检查是否可以在Java 8中成功创建文件   内存为什么netbeans java profiler会在~64mb的堆溢出错误下崩溃?   java如何知道两个线程中哪个线程首先完成执行   java是否可以在同一框架内为不同的面板设置不同的外观?   java如何从停止时间中减去开始时间