destrezza sono definiti da uno schema, che è enumerabile:
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()
Qui uso il .namesAndDescriptions()
method, ma si può anche semplicemente usare l'interfaccia come un iteratore se non si dispone di alcun metodo sul tuo schema:
for name in IYourDexteritySchema:
value = getattr(yourDexterityInstance, name)
Ultimo ma non meno importante, zope.schema
ha un metodo di utilità chiamato getFieldsInOrder
che filtrerà il zope.schema
campi in un'interfaccia; i metodi di questo elenco anche i metodi e gli attributi non-schema, getFieldsInOrder
elenca solo zope.schema
specifici tipi di attributi:
from zope.schema import getFieldsInOrder
for name, field in getFieldsInOrder(IYourDexteritySchema):
value = getattr(yourDexterityInstance, name)
Se è stato definito lo schema attraverso-il-web, non si può sapere come cercare l'interfaccia per la vostra genere. È inoltre possibile recuperare l'interfaccia dello schema attraverso il tipo Informazione Fabbrica, o FTI in breve:
from plone.dexterity.interfaces import IDexterityFTI
from zope.component import getUtility
schema = getUtility(IDexterityFTI, name='your.dexterity.type').lookupSchema()
dove schema
ora detiene l'interfaccia.
fonte
2012-08-29 13:09:18
Nota: Tutte le risposte qui solo danno i campi nell'interfaccia principale, non campi che possono essere aggiunti dai comportamenti. Sfortunatamente quelli sono considerati parte dei moduli di rendering e non esiste attualmente un buon modo per enumerarli tutti al di fuori del processo di rendering del modulo. –