2013-09-25 29 views
6

Ich habe ein Formularschema, das von einem anderen Formularschema erbt. Beide haben fieldsets. Die Feldgruppen werden jedoch in der Reihenfolge angeordnet, in der sie erstellt werden. Das im letzten Schema beschriebene Fieldset wird also das letzte sein. Ich möchte, dass es der erste ist. Gibt es eine Möglichkeit, das zu tun?Wie kann ich die Feldgruppenreihenfolge ändern?

Beispiel:

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

Ich bin mir nicht sicher, ob es funktioniert, aber Sie könnten versuchen, jedes Feldset in seiner eigenen Klasse zu deklarieren und sie in einer dritten in der richtigen Reihenfolge zu mischen. ZB: 'Klasse FormSchemaFinal (FormSchemaFieldset2, FormSchemaFieldset1):' – tcurvelo

Antwort

2

Sie können nicht, ich habe Angst. Die Schemafeldsets sind immer in umgekehrter Schnittstellenauflösungsreihenfolge zusammengeführt; Basis vor der abgeleiteten Schnittstelle. Wenn das Feldset erneut für das Schema FormSchema2 deklariert wird, wird das Feldset nur zweimal aufgelistet.

Wenn Sie haben, um die Feldgruppenreihenfolge zu steuern, leiten Sie sie nicht vom Basisschema ab, sondern deklarieren Sie sie erneut.

+0

Diese Antwort ist natürlich nicht zu 100% sachlich korrekt. Sie können den Mist aus Zope-Interfaces herausschlagen, indem Sie ihre Interna manuell manipulieren. Aber Sie wollen das nicht tun :) –

+1

@Mikko: Sie können die markierten Werte mit der 'setTaggedValue()' Methode auf dem Basisschema setzen. Oder monkeypatch 'plone.supermodel' oder' plone.autoform'. Aber das würde entweder das Basisschema durchbrechen oder intime Kenntnisse der beiden Frameworks erfordern und wäre äußerst fragil. –