Tres Seaver wrote: > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > Vladislav Vorobiev wrote: > >> Thierry Florac wrote: >> >>> Le vendredi 29 janvier 2010, >>> Vladislav Vorobiev <vav...@mykniga.de> a écrit : >>> ====================================================================== >>> ... >>> >>> >>> >>>> Thierry thank you for answer but it doesn't help. >>>> >>>> I implement all what you sad. I tried with normal “list” and than >>>> swiched to “PersistentList” >>>> >>>> code looks like that: >>>> >>>> from persistent.list import PersistentList >>>> import transaction >>>> >>>> <snip> >>>> >>>> myList=PersistentList([self.context.pfad, 'object]) >>>> myList[0] = PersistentList([self.context.pfad, 'object])[0] #hope I >>>> anderstud you right >>>> >>>> ob.refList= myList >>>> ob._p_changed = True >>>> ob.refList._p_changed = True >>>> self.context._setObject(id, ob) >>>> >>>> After add I call again: >>>> >>>> ob._p_changed = True >>>> ob.refList._p_changed = True >>>> transaction.commit() >>>> >>>> I see the commitet trunsactions in ZMI >>>> >>>> The same problem. After restart ist the Attribut not in context. >>>> >>>> For example return's >>>> >>>> Before restart: ***1 >>>> ob.refList[0].objectValues()[0].absolute_url() >>>> /pfad/object/FirstObjectOfReferencedObject >>>> >>>> After restart only the id of the object: >>>> ob.refList[0].objectValues()[0].absolute_url() >>>> FirstObjectOfReferencedObject >>>> >>>> Here is a place for an other question: >>>> >>>> Normaly self.absolute_url() returns url with hostname, >>>> (http://localhost/bla/bla) >>>> but already befor restart I get without http://localhost/... see ***1 >>>> >>>> It seem's that I forgot something. I would be glad to if somebody >>>> explain me this problem. >>>> >>>> >>> ====================================================================== >>> >>> In fact I'm not really sure to understand your data structure and it's >>> goals... >>> Could you explain me what you want to do ?? >>> >>> Thierry >>> >>> >> I want to set some references from object to another object through. I try >> to >> explain this with example classes. >> >> Example with two classes: >> >> #Create classes >> >>>class School: >> >>> pass >> >> >>>class People: >> >>> pass >> >> #Create objects >> >>>p=People() >> >> >>>s0=School() >> >>>s0.name="Konrad School" >> >> >>>s1=School >> >>>s1.name="Leopold School" >> >> Now I set the referece >> >> >>>p.school1=s0 >> >>>p.school2=s1 >> >> Now I can access through the attribut to s0 and s1 objects: >> >> p.school1.name >> “Konrad School“ >> >> This construction works persistent without problems. >> >> The idea is to put the references in a list. >> >> >>>p.schools=[s0,s1] >> >> to access them >> >> >>>p.schools[0].name >> “Konrad School“ >> >> >>>s1.name="Leo School" >> >>>p.schools[1].name >> “Leo School“ >> >> >>>type(p.schools[1]) >> <type 'classobj'> >> >> It works in zope without restart. If the server was restartet I get some >> unwanted results. See my previews posts. >> The same effects I get with PersistentLists... >> >> I hope it is more understandable. >> > > You can't expect to use a simple list as an attribute of a persistent > object without taking special precautions. Either you have methods > which mutate the list, and then set the '_p_changed' attribute to 1: > > def addSchool(self, school): > self.schools.append(school) > self._p_changed = 1 > > or re-assign the list attribute: > > def addSchool(self, school): > schools = self.schools > schools.append(school) > self.schools = schools > > You shoule be able to use a PersistentList instead of a "plain" Python > list to avoid the need for one of those two problems: > > from persistent.list import PersistentList > ... > class Person: > def __init__(self): > self.schools = PersistentList() > > Thank you for resonse but it doesn't help.
I post my implementation with results. #my method def addFotoalbom(self): #test with PersistentList self.ref_=PersistentList() nb=getattr(self.BoxingCategoryContainer, 'Kat 1').FOTOCAT self.ref_.append(nb) #test without List self.ref=getattr(self.BoxingCategoryContainer, 'Kat 1').FOTOCAT return 'ok' Results without restarting the server 1. #absolue_url() method of of context context.absolute_url() 'http://localhost/CategoryContainer/Kat%201/x1' x1 is my self-object. 2. #accessing attribute through the list list(context.ref_[0].objectValues())[0].absolute_url() '/testpath/CategoryContainer/Kat%201/FOTOCAT/asa' 'asa' is the first object in FOTOCAT but where is http://localhost and why is the URL without x1/FOTOCAT? 3. #accessing attribute without list context.ref.objectValues()[0].absolute_url() 'http://localhost/CategoryContainer/Kat%201/x1/FOTOCAT/asa' Thats ok. After RESTART the Server 1. context.absolute_url() 'http://boxapp.localhost/BoxingCategoryContainer/Kat%201/x1' 2. list(context.ref_[0].objectValues())[0].absolute_url() 'asa' What happaning here? 3. #accessing attribute without list context.ref.objectValues()[1].absolute_url() 'http://localhost/CategoryContainer/Kat%201/x1/FOTOCAT/asa' ok You see attributes without PersistentList survives the restart, PersistentList not. Why I get some results without "http://localhost" for context.absolute_url() befor restart? Its '/testpath/CategoryContainer/Kat%201/FOTOCAT/asa' must be 'http://localhost/CategoryContainer/Kat%201/FOTOCAT/asa'. Any Ideas? Thanks Vlad _______________________________________________ Zope maillist - Zope@zope.org https://mail.zope.org/mailman/listinfo/zope ** No cross posts or HTML encoding! ** (Related lists - https://mail.zope.org/mailman/listinfo/zope-announce https://mail.zope.org/mailman/listinfo/zope-dev )