Lorenzo Gil Sánchez wrote:
Hi, I've been using a zope.app.generations.interfaces.ISchemaManager to keep my database up to date with respect to the changes in the models of my application and everything is well so far. Now I have a tricky situation. My model had an attribute and now I changed that attribute to be read only. Before: ------- class IModel(Interface): attr1 = zope.schema.TextLine() class Model(Persistent): implements(IModel) def __init__(self, attr1=None): self.attr1 = attr1 After: ------ class IModel(Interface): attr1 = zope.schema.TextLine(readonly=True) attr2 = zope.schema.TextLine() class Model(Persistent): implements(IModel) def __init__(self, attr2=None): self.attr2 = attr2 def _getAttr1(self): return self.attr2.lower() attr1 = property(_getAttr1) As you can see, now attr1 is a computed attribute from attr2. When updating the old Model objects I add the 'attr2' attribute but I can't remove the old 'attr1' attribute since is still defined in Model but is a totally different thing. I can forget about removing the 'attr1' attribute and things keep working well. The problem is a waste of space in the database since that information is still there but impossible to retrieve, right? I have a related question: is attr1 still saved in the database in the newer version no matter is a read only python property or does the ZODB handle this case? As far as I know ZODB only skip those attributes beginning with _v_ (for volatile), but don't know what it does with python properties... Has anyone ever reached a similar situation? Any solution?
You can do this on your instance : del obj.__dict__['attr1'] Jürgen _______________________________________________ Zope3-users mailing list Zope3email@example.com http://mail.zope.org/mailman/listinfo/zope3-users