Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs z3c.form Tutorial z3c.form groups (Felder Gruppieren)

z3c.form groups (Felder Gruppieren)

Mit Hilfe von z3c.form groups können Sie Formularfelder zu logischen Einheiten zusammen fassen und als fieldset darstellen.

Ein paar Vorbemerkungen zu Gruppen (groups)

  • Gruppen können felder verschiedener schemata enthalten.
  • Dabei ist darauf zu achten das sich alle Felder im selben Namensraum befinden und deshalb gegebenen falls mittels prefix separiert werden müssen.

Ein Fomular mit Gruppen

Schemata anlegen

Zu erst definieren wir uns ein schema für Kontaktdaten:

class IContact(Interface):
"""contact data"""

first_name = schema.TextLine(
title=_(u"First Name"),
required=False,
description=_(u""),
)
last_name = schema.TextLine(
title=_(u"Last Name"),
required=False,
description=_(u""),
)
email = schema.TextLine(
title=_(u"Email Address"),
required=False,
description=_(u"Please provide a real email address.
This is used for activation!"),
)

Nun noch ein zweites schema mit ähnlichen Feldern:

class ISpecialContact(Interface):
"""special contact data"""

ar_first_name = schema.TextLine(
title=_(u"First Name"),
required=False,
description=_(u""),
)
ar_last_name = schema.TextLine(
title=_(u"Last Name"),
required=False,
description=_(u""),
)
ar_email = schema.TextLine(
title=_(u"Email Address"),
required=False,
description=_(u"Please provide a real email address.
This is used for activation!"),
)

Und das eigentliche Schema des Formulars:

class IContactData(interface.Interface):
organisation_title = schema.TextLine(
title = _(u"Organisation Name"),
required = True,
description = _(u""),
)

Gruppen definieren

Wir definieren uns wie folgt 2 Gruppen:

class Group1(group.Group):
fields = field.Fields(IContact)
label = _(u'Contact')
description = _(u"Please enter contact data here.")
prefix = 'group1'
class Group2(group.Group):
fields = field.Fields(ISpecialContact)
label = _(u'Special Contact')
description = _(u"Please enter special contact data here.")
prefix = 'group2'

Gruppen in das Formular einbinden

Die Gruppen werden über das groups Attribute in das Formular eingebunden.

class ContactDataForm(group.GroupForm, form.EditForm):
fields = field.Fields(IContactData)
ignoreContext = True
groups = (Group1, Group2)

Man erhält jetzt ein Formular, in dem alle Felder von IContactData aufgeführt sind und dann alle Felder der Gruppen, wobei jeder Gruppe durch ein fieldset gekennzeichnet ist.