Max M wrote:
The management interface should show dangling links instead of just hiding them.
Not in the current implementation. The product currently deletes relations that no longer has valid objects. I did this so that you cannot remove an object with one meta_type and add one with another meta_type but the same id. This, I guess could seriously screw up the app.
Maybe I was doing something stupid (with all that banging my head on the wall trying to learn zope+cmf+zpt+writing python products all at once ;-) but this is not what I saw: before I implemented manage_beforeDelete in my objects, I deleted one, I went to the management interface of the mxmRelation and saw that the relation wasn't there anymore -- good. Then I created a new object with the same id and when I went to display it the old relation was still in place -- bad. e.g. proposal1 -> company1 deleted proposal1 created new proposal1 (which should be unrelated to company1) and saw that the old relation was still in place. Since I didn't know of manage_beforeDelete at the time, in my object creation method I just put a call to delete dangling relations :-) [...]
And if you want referential integrity you still have to code it by hand in each object (i.e. by implementing manage_beforeDelete).
This will probably never change. What should happen when an object is deleted is application and object specific and cannot be more generalized than to a hook.
Well, there are not so many cases and with postgres (not that I'm an expert of it, it just happens that I read a tutorial about foreign keys and referential integrity ;-) you can define what happens when you delete a record another table depends on: 1) do nothing 2) cascade delete (i.e.delete the record and all records depending on it, useful for example if you're trying to delete an invoice and its lines) 3) don't allow deleting the record and that's it. But, as you say, that's not possible without modifications to zope core. Bye -- Luca Olivetti