Zope3: comment ajouter un objet proprement.
Posté le
13/05/2006
sous
zope3
A première vue, le plus simple moyen d'ajouter un objet dans un dossier serait le suivant:
>>> from zope.app.folder import Folder
>>> mycontent = Folder()
>>> mycontent.__name__ = 'myid'
>>> folder = Folder()
>>> folder['myid'] = mycontent
Cela fonctionne bien. L'inconvénient est que l'on perds toute la machinerie de zope.
J'ai donc cherché un moyen plus propre d'ajouter un objet. J'en suis arrivé a la conclusion que le mieux est d'utiliser une vue Adding. Ce qui nous donne:
from zope.app.container.browser.adding import Adding
from zope.app.event.objectevent import ObjectCreatedEvent
from contents import MyContent
class MyContentView(BrowserView):
""" a simple view """
def add(self):
view = Adding( self.context, self.request )
context = view.add( MyContent() )
notify(ObjectCreatedEvent(context))
Par ce moyen, on créer un objet proprement. Par exemple l'id seras généré à l'aide d'un INameChooser, etc.