[PEAK] Cascading delete
Tiago Cogumbreiro
cogumbreiro at gmail.com
Tue Jul 26 14:37:45 EDT 2005
> In fact, model attributes currently have an 'isComposite' attribute that
> indicates whether they are a composition link; i.e., items on the other
> side of the link are "owned" by the object. This would probably be a good
> indication that removing the source object should result in removal of the
> target. So, maybe something like this:
>
> def remove(self,ob):
> super(MyDM, self).remove(ob)
> for feature in ob.mdl_features:
> if feature.isComposite:
> if feature.isMany:
> items = feature.get(ob)
> else:
> items = [feature.get(ob)]
> for other in items:
> if other._p_jar is not None:
> other._p_jar.remove(other)
>
> This would cascade-delete all objects referenced by model attributes
> defined with 'isComposite = True' in their definition body.
Very nice indeed :) Thanks alot!
I only used teh events because it seemed to be the cleanest aproach to
the problem. I didn't knew that the model fields could be used in that
rather interesting technique.
On a side not, that example only works if you put the super.remove
call _after_ the propagation, otherwise when you get the mdl_features
attribute it will raise an error.
More information about the PEAK
mailing list