Geschicklichkeit Aufgaben werden durch ein Schema definiert, die zählbare ist:
from zope.interface.interfaces import IMethod
for name, desc in IYourDexteritySchema.namesAndDescriptions():
value = getattr(yourDexterityInstance, name)
if IMethod.providedBy(desc):
# It's a method, call it
value = value()
Hier verwende ich die .namesAndDescriptions()
method, aber Sie können auch nur die Schnittstelle als Iterator verwenden, wenn Sie Ihre keine Methoden auf Schema:
for name in IYourDexteritySchema:
value = getattr(yourDexterityInstance, name)
Last but not least, zope.schema
hat eine Dienstprogramm Methode getFieldsInOrder
benannt, die auf zope.schema
Felder in einer Schnittstelle filtern; die oben genannten Methoden auch eine Liste Methoden und nicht-Schema Attribute, getFieldsInOrder
listet nur zope.schema
spezifischen Attributtypen:
from zope.schema import getFieldsInOrder
for name, field in getFieldsInOrder(IYourDexteritySchema):
value = getattr(yourDexterityInstance, name)
Wenn Sie das Schema durch-the-Web definiert sind, können Sie nicht wissen, wie die Schnittstelle suchen für Ihre Art. Sie können auch die Schema-Schnittstelle durch die Factory-Typinformation, oder FTI kurz abrufen:
from plone.dexterity.interfaces import IDexterityFTI
from zope.component import getUtility
schema = getUtility(IDexterityFTI, name='your.dexterity.type').lookupSchema()
wo schema
jetzt Ihre Schnittstelle halten.
Hinweis: Alle Antworten hier nur die Felder auf der Haupt-Schnittstelle geben, nicht Felder, die durch Verhalten hinzugefügt werden können. Leider werden diese als Teil von Rendering-Formularen erkannt und es gibt derzeit keine gute Möglichkeit, sie alle außerhalb des Formular-Rendering-Prozesses aufzulisten. –