le 02.09.2008 18:33 Michael Bayer a écrit:
On Sep 2, 2008, at 12:06 PM, Remi Jolin - SysGroup wrote:
Hello,
Here is a small example of my issue (it's Elixir syntax, but I think
it's not an Elixir specific issue) :
class Rec(Entity):
collection = ManyToOne('Coll')
class Coll(Entity):
recs = OneToMany('Rec')
r1 = Rec()
r2 = Rec()
c = Coll(recs=[r1,r2])
at that time len(c.recs) == 2
if I do something like r1.delete(), I would expect len(c.recs) == 1
but
it stays at 2 until the flush(). Am I missing some parameter on the
class definitions ?
I've tried some cascade parameters but they seem to handle the Recs
deletion when you delete a Coll.
saying r1.delete() won't automatically update the already-loaded
recs collection which it's a part of. You'd instead configure
cascade=all, delete-orphan on recs, so that the removal of a Rec
from c.recs would result in its deletion. Otherwise, any activity
which refreshes c.recs after a flush has occured will also do.
So, instead of r1.delete(), the solution could be (having configured
cascade=all, delete-orphan on recs) to do a
r1.collection = None and let the flush() delete it because of the
cascade rules.
I'm also not sure if the above is properly associating recs with
collection since SQLA usually needs a backref keyword to work this
out; I'm not sure what Elixir uses to indicate that.
Elixir handles the backrefs without the need to explicitly define them
as long as there is no ambiguity.
--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups
sqlalchemy group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~--~~~~--~~--~--~---