Direkt zum Inhalt | Direkt zur Navigation

Benutzerspezifische Werkzeuge

Sie sind hier: Startseite / Tech-Blog / Plone: Annotations zum speichern von Daten an Objekten

Plone: Annotations zum speichern von Daten an Objekten

Annotations sind ein gutes Mittel um Komplexe Datenstrukturen an Objekten zu speichern, von denen das Objekt selbst keine Kenntnis haben muss.

Annotations werden in Zope üblicherweise als __annotations__ (BTree) unterhalb des betreffenden Objektes abgelegt. Das Annotations Objekt verhält sich wie ein Dictionary.

Um Konflikte mit anderen Anwendungen zu vermeiden, sollten Informationen unterhalb eines keys der den Namen der Anwendung enthält abgelegt werden.

Annotatable?

Damit annotations zum speichern von Daten, an einem Objekt verwendet werden können, muss das Objekt das Interface IAttributeAnnotatable implementiert haben. Um dies zu erreichen kann man es direkt in der Klasse implementieren oder wenn man selbst keinen Einfluss auf die Klasse hat, dann kann man es ganz einfach per zcml-Anweisung in der configure.zcml wie folgt definieren.

<class class="Products.CMFCore.MemberDataTool.MemberData">
  <implements
     interface="zope.annotation.interfaces.IAttributeAnnotatable"
     />
</class>

Daten in Annotations speichern

Wenn wir jetzt z.B. an ein MemberData Objekt Daten als annotations hängen möchten, dann können wir dies wie folgt machen.

from zope.annotation.interfaces import IAnnotations
from ZODB.PersistentMapping import PersistentMapping

admin = portal.portal_membership.getAuthenticatedMember()
admin_annotations = IAnnotations(admin)
infos = PersistentMapping({'groesse': '184cm'})
admin_annotations["member.datatest"] = infos

Das betreffende Objekt sollte persistent sein, was hier der Fall ist.

Weitere Informationen sind hier zu finden:

abgelegt unter: ,