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
- 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,
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
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.
For more information about ZODB, see the ZODB Wiki:
ZODB-Dev mailing list - ZODB-Dev@zope.org