On Thu, Jul 13, 2006 at 03:55:53PM -0400, Chris S wrote: > not yet defined. And of course I'm not assigning to any other > Persistent instances, since the point of the code was to show that > Zope can't persist objects that don't inherit the Persistent class.
It can, but: - non-Persistent objects have to be stored as attributes of Persistent objects. - Modifying a mutable non-Persistent object means you have to either set _p_changed on the parent Persistent object, or re-assign the mutable to parent object. - setting _p_changed on non-Persistent objects has no effect. In your example, since root is the only thing Persistent, the lines: parent._p_changed = 1 parent.children._p_changed = 1 ... have no effect. You could instead do either of (untested but I think these should both work): root._p_changed = 1 ...or: setattr(root, parentName, parent) But you don't want big chains of non-Persistent objects, it leads to write conflict errors and unnecessary storage bloat. Make some Persistent wrapper classes and use them. Use BTrees when you need a large number of highly mutable sub-objects. -- Paul Winkler http://www.slinkp.com _______________________________________________ For more information about ZODB, see the ZODB Wiki: http://www.zope.org/Wikis/ZODB/ ZODB-Dev mailing list - ZODB-Dev@zope.org http://mail.zope.org/mailman/listinfo/zodb-dev