如何更改字段集顺序?

问题描述:

我有一个从另一个表单模式继承的表单模式。两者都有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

你不能,我很害怕。模式字段集合为总是以反向接口解析顺序合并;派生接口之前的基础。在FormSchema2架构上再次声明字段集只会导致字段集被列出两次。

如果您的具有来控制字段集顺序,请不要从基本模式派生,而是重新声明它。

+0

这个答案当然不是100%事实上是正确的。您可以通过手动操作其内部来解决zope界面中的垃圾问题。但你不想这么做:) –

+1

@Mikko:你可以在基本模式上用'setTaggedValue()'方法设置标签值。或monkeypatch' plone.supermodel'或'plone.autoform'。但是这要么打破基本模式,要么需要对这两个框架有深入的了解,而且会非常脆弱。 –