2012-01-17 95 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