2013-09-25 102 views
6

我有一個從另一個表單模式繼承的表單模式。兩者都有fieldsets。但是,這些字段集按照它們創建的順序放置。所以最後一個模式中描述的字段將是最後一個。我希望它是第一個。有沒有辦法做到這一點 ?如何更改字段集順序?

例子:

from plone.supermodel import model 
from zope import schema 

class FormSchema(model.Schema): 
    model.fieldset(
      'test', 
      label='Test', 
      fields=['field1'] 
    ) 
    field1 = schema.Text(title=u'test') 


class FormSchema2(FormSchema): 
    # Is last but I would like to place it first 
    model.fieldset(
      'test2', 
      label='Test2', 
      fields=['field2'] 
    ) 
    field2 = schema.Text(title=u'test2') 
+1

我不確定它是否有效,但是您可以嘗試在自己的類中聲明每個字段集,然後按照正確的順序在第三個字段集中混合它們。例如:'FormSchemaFinal(FormSchemaFieldset2,FormSchemaFieldset1):' – tcurvelo

回答

2

你不能,我很害怕。模式字段集合爲總是以反向接口解析順序合併;派生接口之前的基礎。在FormSchema2架構上再次聲明字段集只會導致字段集被列出兩次。

如果您的具有來控制字段集順序,請不要從基本模式派生,而是重新聲明它。

+0

這個答案當然不是100%事實上是正確的。您可以通過手動操作其內部來解決zope界面中的垃圾問題。但你不想這麼做:) –

+1

@Mikko:你可以在基本模式上用'setTaggedValue()'方法設置標籤值。或monkeypatch' plone.supermodel'或'plone.autoform'。但是這要麼打破基本模式,要麼需要對這兩個框架有深入的瞭解,而且會非常脆弱。 –