Sektionen
Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Support Dokumentation docs Zope Schema Fields

Zope Schema Fields

Darstellung der Zuordnungen von Zope Schema Fields und Widgets

Felder sind einzelne "Bausteine" eines Conent-Typs in Plone. So besteht bspw. der Content-Typ "Page", also eine Website im wesentlichen aus den folgenden Feldern:

  • TextLine-Feld für die ID
  • Text-Feld für die Beschreibung
  • RichText-Feld für den Haupttext

 

Standardfelder

Standardfelder werden zope.schema definiert. Verfügbar sind:

  • Field
  • Container
  • Iterable
  • Orderable
  • MinmaxLen
  • Choice
  • Bytes
  • ASCII
  • BytesLine
  • ASCIILine
  • Text
  • TextLine
  • Bool
  • Int
  • Float
  • Tuple
  • List
  • Set
  • FrozenSet
  • Password
  • Dict
  • Datetime
  • Date
  • Timedelta
  • SourceText
  • Object
  • URI
  • Id
  • DottedName
  • InterfaceField

Widgets

Widgets dienen der Darstellung eines Feldes oder anders ausgedrückt muss jedem Field-Typ ein HTML-Schnippsel zugeordnet werden, damit der eigentliche Wert des Feldes, eingebettet in diesen Markup-Schnippsel, auf einer ausgelieferten Website dargestellt werden kann.

Zope's Standard-Widgets

In dem Modul zope.app.form.browser sind die folgenden Widgets zu finden:

  • BrowserWidget
  • DisplayWidget
  • UnicodeDisplayWidget
  • TextWidget
  • BytesWidget
  • TextAreaWidget
  • BytesAreaWidget
  • PasswordWidget
  • FileWidget
  • ASCIIWidget
  • ASCIIAreaWidget
  • IntWidget
  • FloatWidget
  • DatetimeWidget
  • DateWidget
  • DatetimeI18nWidget
  • DateI18nWidget
  • DatetimeDisplayWidget
  • DateDisplayWidget
  • BytesDisplayWidget
  • ASCIIDisplayWidget
  • URIDisplayWidget
  • CheckBoxWidget
  • BooleanRadioWidget
  • BooleanSelectWidget
  • BooleanDropdownWidget
  • ItemDisplayWidget
  • ItemsMultiDisplayWidget
  • SetDisplayWidget
  • ListDisplayWidget
  • ChoiceDisplayWidget
  • ChoiceInputWidget
  • CollectionDisplayWidget
  • CollectionInputWidget
  • ChoiceCollectionDisplayWidget
  • ChoiceCollectionInputWidget
  • SelectWidget
  • DropdownWidget
  • RadioWidget
  • MultiSelectWidget
  • MultiSelectSetWidget
  • MultiCheckBoxWidget
  • OrderedMultiSelectWidget
  • SequenceWidget
  • TupleSequenceWidget
  • ListSequenceWidget
  • SequenceDisplayWidget
  • ObjectWidget

 

z3c.form-Widgets

z3c stellt ein egg zur Verfügung, welches zusätzliche Widgets umfasst bzw. die Zope-Standard-Widgets überschreibt.

Um Herauszufinden, welche z3c.form-Widgets welchen Feld-Typen zugeordnet werden, habe ich den entsprechenden Aufruf im Code des Moduls z3c.form.field der FieldWidgets-Klasse auf alle Feld-Typen angewendet. Dort wird der entsprechende Multi-Adapter für FeldTyp-Instanz, Request-instanz und das IFieldWidget-Interface ermittelt.

  • Field
(Pdb) type(zope.component.getMultiAdapter(\
(schema.Field(), self.request), \
interfaces.IFieldWidget\
)\
)
*** ComponentLookupError: \
( (<zope.schema._bootstrapfields.Field object at 0xfb4c9ec>, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • Container
(Pdb) type(zope.component.getMultiAdapter(\
(schema.Container(), self.request),\
 interfaces.IFieldWidget\
)\
)
*** ComponentLookupError: \
( (<zope.schema._bootstrapfields.Container object at 0xfb4ca0c>, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • Iterable
(Pdb) type(zope.component.getMultiAdapter(\
(schema.Iterable(), self.request),\
interfaces.IFieldWidget\
)\
)
*** ComponentLookupError: \
( (<zope.schema._bootstrapfields.Iterable object at 0xfb4ca4c>, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • Orderable

Der Feld-Konstruktor benötigt spezielle Parameter, die dem super-Konstruktor (object) übergeben werden. --> Feld nicht getestet

  • MinmaxLen
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.MinMaxLen(), self.request),\
 interfaces.IFieldWidget\
)\
)
*** ComponentLookupError:\
 ( (<zope.schema._bootstrapfields.MinMaxLen object at 0xfb4c9ec>, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • Choice
(Pdb) choice = schema.Choice({1:'one', 2:'two', 3:'three'})
(Pdb) type(zope.component.getMultiAdapter(\
 (choice, self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.select.SelectWidget'>
(Pdb) choice = schema.Choice(['one','two', 'three'])
(Pdb) type(zope.component.getMultiAdapter(\
(choice, self.request),\
 interfaces.IFieldWidget)\
 )
<class 'z3c.form.browser.select.SelectWidget'>
  • Bytes
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Bytes(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.file.FileWidget'>
  • ASCII
(Pdb) type(zope.component.getMultiAdapter(\
(schema.ASCII(), self.request),\
interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.textarea.TextAreaWidget'>
  • BytesLine
(Pdb) type(zope.component.getMultiAdapter(\
(schema.BytesLine(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.text.TextWidget'>
  • ASCIILine
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.ASCIILine(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.text.TextWidget'>
  • Text
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Text(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.textarea.TextAreaWidget'>
  • TextLine
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.TextLine(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.text.TextWidget'>
  • Bool
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Bool(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.radio.RadioWidget'>
  • Int
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Int(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.text.TextWidget'>
  • Float
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Float(), self.request),\
 interfaces.IFieldWidget\
)\
 )
<class 'z3c.form.browser.text.TextWidget'>
  • Tuple
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Tuple(), self.request),\
 interfaces.IFieldWidget\
)\
)
*** ComponentLookupError:\
 ( (<zope.schema._field.Tuple object at 0xfb4c90c>,\
 None, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • List
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.List(), self.request),\
 interfaces.IFieldWidget\
)\
)
*** ComponentLookupError:\
 ( (<zope.schema._field.List object at 0xfb4c84c>,\
 None, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • Set
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Set(), self.request),\
 interfaces.IFieldWidget\
)\
)
*** ComponentLookupError:\
 ( (<zope.schema._field.Set object at 0xfb4ca0c>,\
 None, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • FrozenSet
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.FrozenSet(), self.request),\
 interfaces.IFieldWidget\
)\
 )
*** ComponentLookupError:\
 ( (<zope.schema._field.FrozenSet object at 0xfb4c90c>,\
 None, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • Password
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Password(), self.request),\
 interfaces.IFieldWidget\
)\
)
<class 'z3c.form.browser.password.PasswordWidget'>
  • Dict
(Pdb) dictionary = {1:'one', 2:'two', 3:'three'}
(Pdb) type(zope.component.getMultiAdapter(\
 (dictionary, self.request),\
 interfaces.IFieldWidget\
)\
)
*** ComponentLookupError:\
 ( ({1: 'one', 2: 'two', 3: 'three'}, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

In diesem Fall ist also kein "Standard-Widget" verfügbar. Um diesen Field-Typ anzuzeigen, muss explizit ein Widget zugewiesen werden.

  • Datetime
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Datetime(), self.request), \
interfaces.IFieldWidget\
)\
 )
<class 'collective.z3cform.datetimewidget.widget_datetime.DatetimeWidget'>
  • Date
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Date(), self.request),\
 interfaces.IFieldWidget\
)\
 )
<class 'collective.z3cform.datetimewidget.widget_date.DateWidget'>
  • Timedelta
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Timedelta(), self.request),\
 interfaces.IFieldWidget\
)\
 )
<class 'z3c.form.browser.text.TextWidget'>
  • SourceText
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.SourceText(), self.request),\
 interfaces.IFieldWidget\
)\
 )
<class 'z3c.form.browser.textarea.TextAreaWidget'>
  • Object

Der Feld-Konstruktor benötigt spezielle Parameter, die dem super-Konstruktor (object) übergeben werden. --> Feld nicht getestet

  • URI
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.URI(), self.request),\
 interfaces.IFieldWidget\
)\
 )
<class 'z3c.form.browser.text.TextWidget'>
  • Id
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.Id(), self.request),\
 interfaces.IFieldWidget\
)\
 )
<class 'z3c.form.browser.text.TextWidget'>
  • DottedName
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.DottedName(), self.request),\
 interfaces.IFieldWidget\
)\
 )
<class 'z3c.form.browser.text.TextWidget'>
  • InterfaceField
(Pdb) type(zope.component.getMultiAdapter(\
 (schema.InterfaceField(), self.request),\
 interfaces.IFieldWidget\
)\
 )
*** ComponentLookupError:\
 ( (<zope.schema._field.InterfaceField object at 0xfb4c84c>, \
<HTTPRequest, URL=http://localhost:8080/demo/++add++inqbus.dexteritydemo.widgetdemo>), \
<InterfaceClass z3c.form.interfaces.IFieldWidget>, u'')

To be continued...

from zope.schema._field import Field, Container, Iterable, Orderable
from zope.schema._field import MinMaxLen, Choice
from zope.schema._field import Bytes, ASCII, BytesLine, ASCIILine
from zope.schema._field import Text, TextLine, Bool, Int, Float
from zope.schema._field import Tuple, List, Set, FrozenSet
from zope.schema._field import Password, Dict, Datetime, Date, Timedelta
from zope.schema._field import SourceText
from zope.schema._field import Object, URI, Id, DottedName
from zope.schema._field import InterfaceField