Plone 灵巧性中的访问器和变异器方法

Plone 灵巧性中的访问器和变异器方法,plone,dexterity,Plone,Dexterity,我是灵巧的初学者(大约2天了)。在迁移网站的过程中,我正在尝试将旧的内容类型迁移到灵巧的内容 经典原型中的模式定义如下 TextField('script', searchable=0, mutator="write", accessor="__call__", edit_accessor="document_src", widget=TextAreaWidget(label="Page Temp

我是灵巧的初学者(大约2天了)。在迁移网站的过程中,我正在尝试将旧的内容类型迁移到灵巧的内容

经典原型中的模式定义如下

TextField('script',
          searchable=0,
          mutator="write",
          accessor="__call__",
          edit_accessor="document_src",
          widget=TextAreaWidget(label="Page Template script",rows=40,cols=40),
如何重新定义灵巧度?我正在从Plone 252升级到Plone 412


关于,

您必须从头开始创建一个新的敏捷内容类型,并将原型的模式完全重写为一个新模式,该模式继承自plone.directives.form,并使用字段类型表单zope.Schema

有关更多信息,请参见此处:

例如,原型的模式字段声明在灵活性方面如下所示:

script = schema.TextLine(
        title=_(u"Page Template Script"),
    )
灵巧内容类型不会像原型内容类型那样获得自动访问器和变异器。相反,您只需像访问属性一样访问schema字段

例如:

script = myfolder.script
如果您想要创建相同的访问器和变异器(就像您在Archetypes字段中指定的那样),您必须在您的Dextrity类上手动创建它们

例如,类似于:

class MyFolder(dexterity.Container):
    """ """
    grok.implements(IMyFolderSchema)

    def __call__(self):
        return self.script

    def edit_accessor(self):
        return self.script

    def write(self, value):
        self.script = value

您确定需要访问器吗?灵活性的要点之一是消除对expliit或生成的访问器/变异器代码的需求。如果需要一个方法来提供字段值,可以使用Python属性或描述符(在自定义内容类上)在set/get.Umm的字段/属性/属性接口后面抽象方法。我不确定是否使用这些方法。我正在阅读这本敏捷开发人员手册。readthedocs.org/en/latest/advanced/…但我不清楚我在尝试创建内容类型,该类型的字段采用页面模板代码,并在我的自定义视图中呈现。这就是为什么我在旧原型中使用accessor和mutator来使用zpt方法。