In __init__ you are in a pure python class constructor. The object you're constructing has not yet been assigned its place in the Zope tree, so it doesn't *have* a parent. If you want to do post-constructor initializations, do them after the object has been created and put in the tree via _setObject. See my other recent post about this. Florent Paul Winkler <slinkp23@yahoo.com> wrote:
I have a Product I'm creating (python, not Zclass). I thought that I could get the parent object of an instance of my product using the aq_parent method. But AFAIKT, this only works on an "acquisition wrapper" of an object - not on the object itself??
Example: try this in Boring product:
class BrokenBoring( OFS.SimpleItem.Item, # A simple Principia object. Not Folderish. Persistent, # Make us persistent. Yaah! Acquisition.Implicit, # Be able to find things via acquisition. AccessControl.Role.RoleManager # Security manager. ): """ Can't acquire the parent... fooey. """ meta_type = 'Boring' # what do people think they're adding?
(snip)
def __init__(self, id, title=''): """initialise a new instance of Boring"""
(snip) try: assert hasattr(self, "aq_parent") except: print "Hey! This instance can't acquire parent!!"
When you add one of these in a folder, it prints the exception message in the log. In other words ... no aq_parent.
So I guess I need to get an acquisition wrapper to self, so I can acquire its parent? How do I do that? I can't figure it out from the DevGuide. Or Is there a less bletcherous solution? Help!
--
paul winkler home: http://www.slinkp.com music: http://www.reacharms.com calendars: http://www.calendargalaxy.com
_______________________________________________ Zope maillist - Zope@zope.org http://lists.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope-dev )
-- Florent Guillaume, Nuxeo SARL (Paris, France) +33 1 40 33 79 10 http://nuxeo.com mailto:fg@nuxeo.com