Right, what I'm looking for is to reference an absolute object, sort of like saying "/usr/bin/sendmail" in the filesystem. The note about avoiding an acquisition wrapper by using aq_base is helpful. Hmm, I don't know why I thought I needed _getOb(). Some test I did that confused me because the result was being rendered, and I didn't realize that was happening in the publisher. I think. Anyway, let's say I want to grab /topfolder/subfolder/myobj, and I know they exist, so I'm not worried about acquisition along the way. So what I've got now is: obj = REQUEST.PARENTS[-1].topfolder.subfolder.myobj or na_obj = REQUEST.PARENTS[-1].topfolder.subfolder.myobj.aq_base Ok, that's pretty straightforward! Thanks! Andrew At 09:25 AM 11/22/99 -0500, Brian Lloyd wrote:
I need to grab a reference to a particular object in the ZODB from an external method, bypassing acquisition. Is this the right way to do it:
def test(self, REQUEST=None): """doc string""" myobj = REQUEST.PARENTS[-1].aTopLevelFolder.anotherFolder._getOb('id_o f_myobj') ...do stuff with myobj: myobj.title, myobj.index_html, myobj.property = 123 ...
Maybe, maybe not... _getOb will not return an acquired object, but if the object exists it _will_ be returned as a "wrapped" object so acquisition will be preserved in the result. I'm not clear from your example whether this is what you want. If you want the *resulting* object to be non-acquiring, you'll want to do something like:
def test(self, REQUEST=None): """ """ # get object named 'foo' from self, but dont allow it # to be found via acquisition.
obj=self._getOb('foo')
# while we know that foo is not acquired from above, it # is still wrapped in the context of 'self', so to disable # acquisition we need to unwrap it.
non_aquiring_obj=obj.aq_base
...
Hope this helps!
Brian Lloyd brian@digicool.com Software Engineer 540.371.6909 Digital Creations http://www.digicool.com