2012-01-17 99 views
4

移动领域的fieldsets之间在原型,以一个字段从字段(或图式)移动到另一个,我们可以做到以下几点:上敏捷

schema['creators'].schemata = 'default' 

不过,我没有达到相同使用敏捷。我试过使用表单提示。例如:

form.fieldset('default', 
    fields=['creators'] 
) 

我注意到它不工作,因为此时字段“创建者”未知。 (所有权行为尚未评估)。然而,使用表单提示,我可以从“默认”移动到另一个(例如“所有权”)。

myfile = NamedFile(title=_(u"A file")) 
form.fieldset('ownership', fields=['myfile']) 

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

Thx!

+2

也许你可以通过重写Form.updateWidgets()来操作Z3C Form.widgets实例吗? – 2012-01-17 21:12:18

回答

3

您可能需要在您控制的界面上定义要分配的字段。虽然这看起来是重复的,但为了完整和明确的目的,这是一个好主意。您可以:

(1)声明“创”字段内容类型的接口(有可能,推荐的解决方案),或在...

(2)使用自己的行为记录在这里(和添加此行为类型的FTI在portal_types和相关的设置XML):http://docs.plone.org/external/plone.app.dexterity/docs/behaviors/creating-and-registering-behaviors.html

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

+1

按照(1),我必须在模式界面上做一些类似'creators = schema.Text()'的东西,对吗?我这样做了,但是'IOwnership'的'创造者'并没有重叠我宣布的那个。你有没有例子? – tcurvelo 2012-01-18 15:30:06

+1

是的,在你的界面上创建一个'creators'模式字段,并将IOwnership接口子类化,而不是作为行为混合到FTI中。这种行为很可能是由编辑表单中的plone.autoform组组成的,而不考虑您的选择。如果您绝对必须使用行为,请选择上面的路线#2。 – sdupton 2012-01-18 19:10:04