[Zope3-Users] object widgets, persistency

Andreas Reuleaux reuleaux at web.de
Sun May 1 09:09:24 EDT 2005


To answer my own question - just for the record, in case
someone is having the same difficulties - I found redefining
__getstate__ in Family solved my problem:

...
from zope.security.proxy import removeSecurityProxy

class Family(Persistent):
        ...

    def __getstate__(self):
        s=Persistent.__getstate__(self)
        s['mother']=removeSecurityProxy(self.mother)
        s['father']=removeSecurityProxy(self.father)
        return s


On Mon, Apr 25, 2005 at 11:42:25PM +0200, Andreas Reuleaux wrote:
> ... 
> Then I tried to make Family persistent, i. e. 
> 
>     from persistent import Persistent
>     class Family(Persistent):
>       ...
> 
> and I learned subobjects should be persistent, too
> 
>     from persistent import Persistent
>     class Person(Persistent)
>       ...
> 
> Now when I change family objects in the editform I can do so safely
> with foo and bar, but changing Mother's or Father's name results in an
> error:
> 
>     UnpickleableError: Cannot pickle <type 'zope.security._proxy._Proxy'> objects
> 
> The complete error log is shown below, too. - It seems to me that
> because one has to declare view- (rs. edit-) permissions for Person
> 
>     <require permission="zope.View"
>       interface=".iperson.IPerson"
>     />
> 
> Person is wrapped in a security proxy and therefore family can't be
> saved (pickeled) any more. - Any idea how to solve this?
> 
> I don't have this problem if I only make Person persistent (not
> Family) but of course then I am losing changes to the family
> attributes foo and bar.
> ...


More information about the Zope3-users mailing list