you need to set "cascade='all, delete-orphan' on the relation  
referencing the AssociationProxy.    Some docs on ORM cascades are in  
the ORM tutorial as well as 
http://www.sqlalchemy.org/docs/04/session.html#unitofwork_cascades 
  .



On May 21, 2008, at 12:14 PM, kremlan wrote:

>
> I've posted the following question on the Elixir group and they sent
> me here.
>
> My setup
>
> ##
> # Tables
> ##
> roles = Table('roles', meta,
>    Column('id', Integer, primary_key=True),
>    Column('name', String(25))
> )
>
> users = Table('users', meta,
>    Column('id', Integer, primary_key=True),
>    Column('username', String(125)),
>    Column('password', String(125)),
>    ....
> )
>
> users_roles = Table('users_roles', meta,
>    Column('user_id', Integer, primary_key=True),
>    Column('role_id', Integer, primary_key=True),
>    ....
>    ForeignKeyConstraint(['user_id'], ['users.id']),
>    ForeignKeyConstraint(['role_id'], ['roles.id'])
> )
>
> ##
> # Elixir models
> ##
>
> class UserRole(Entity):
>    using_options(tablename='users_roles', autoload=True)
>    user = ManyToOne('User', colname='user_id')
>    role = ManyToOne('Role', colname='role_id')
>
> class Role(Entity):
>    using_options(tablename='roles', autoload=True)
>    users_roles = OneToMany('UserRole')
>    users = AssociationProxy('users_roles', 'user')
>
> class User(Entity):
>    using_options(tablename='users', autoload=True)
>    users_roles = OneToMany('UserRole')
>    roles = AssociationProxy('users_roles', 'role')
>
> This setup works fine for reading but not for updating or deleting.
>
> I was able to then get the append method working via the following
>
> def _create_ur_by_role(role):
>    return UserRole(role=role)
>
> in class User:
> roles = AssociationProxy('users_roles', 'role',
> creator=_create_ur_by_role)
>
> I am still unable to delete roles. Example:
> me.roles.pop()    < -- works fine
> session.flush()
>
> results in...
>
> AssertionError: Dependency rule tried to blank-out primary key column
> 'users_roles.user_id'
>
> I have tried adding ondelete='cascade' to the UserRole model. This
> caused no change.
>
> Any help will be greatly appreciated
>
> -brad
>
> >


--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to