Plone 基于灵巧度在字段集之间移动字段

Plone 基于灵巧度在字段集之间移动字段,plone,archetypes,dexterity,Plone,Archetypes,Dexterity,在原型中,为了将字段从一个字段集(或模式)移动到另一个字段集,我们可以执行以下操作: schema['creators'].schemata = 'default' 然而,我并没有用灵巧达到同样的效果。我试过使用表单提示。例: form.fieldset('default', fields=['creators'] ) 我注意到它不起作用,因为此时“创建者”字段是未知的。(尚未评估所有权行为) 然而,有了表单提示,我可以从“默认”转移到另一个(例如“所有权”) 我该怎么做?写我自己

在原型中,为了将字段从一个字段集(或模式)移动到另一个字段集,我们可以执行以下操作:

schema['creators'].schemata = 'default'
然而,我并没有用灵巧达到同样的效果。我试过使用表单提示。例:

form.fieldset('default',
    fields=['creators']
 )
我注意到它不起作用,因为此时“创建者”字段是未知的。(尚未评估所有权行为)

然而,有了表单提示,我可以从“默认”转移到另一个(例如“所有权”)

我该怎么做?写我自己的行为


谢谢

您可能需要在控制下的接口上定义要分配的字段。虽然这似乎是重复的,但为了完整和明确起见,这是一个好主意。您可以:

(1) 在内容类型界面上声明“创建者”字段(可能是建议的解决方案),或

(2) 使用此处记录的您自己的行为(并将此行为添加到portal_类型和相关设置XML中的类型FTI):


第一个解决方案应该是最简单的。您希望控制字段集位置或顺序的任何字段都应该由您的接口定义。

也许您可以通过覆盖Form.updateWidgets()来操作Z3C Form.widgets实例?通过遵循(1),我必须在模式接口上执行类似于
creators=schema.Text()
,对吗?我这样做了,但是来自
ioownership
创建者
与我声明的没有重叠。你有一个例子吗?是的,在你的界面上创建一个“创建者”模式字段,并对IOOwnership界面进行子类化,而不是作为一种行为混入FTI。很可能该行为被编入编辑表单的plone.autoform组,而不考虑您的选择。如果您必须使用行为,请选择上面的路线2。
myfile = NamedFile(title=_(u"A file"))
form.fieldset('ownership', fields=['myfile'])