On Tue, Jan 04, 2011 at 03:34:25PM +0300, Oleg Broytman wrote: > Anyway, the following program works for me: > > class User(SQLObject): > class sqlmeta: > table = 'users' > > username = UnicodeCol(alternateID=True, varchar=False, length=8, > alternateMethodName='by_username') > roles = SQLRelatedJoin('Role', intermediateTable='user_roles', > createRelatedTable=False) > > class Role(SQLObject): > class sqlmeta: > table = 'roles' > > name = UnicodeCol(varchar=False, length=8) > users = SQLRelatedJoin('User', intermediateTable='user_roles', > createRelatedTable=False) > > class UserRoles(SQLObject): > class sqlmeta: > table = 'user_roles' > > username = UnicodeCol(dbName='users_id', notNull=True, varchar=False, > length=8) > role = ForeignKey('Role', dbName='roles_id', notNull=True, cascade=True) > unique = index.DatabaseIndex(username, role, unique=True) > > User.createTable() > Role.createTable() > UserRoles.createTable() > > user = User(username='test') > role = Role(name='test') > user.addRole(role) > #role.addUser(user) > > print user.roles > print list(user.roles) > > print role.users > print list(role.users)
Or this one (uses joinColumn/otherColumn instead of dbNames): class User(SQLObject): class sqlmeta: table = 'users' username = UnicodeCol(alternateID=True, varchar=False, length=8, alternateMethodName='by_username') roles = SQLRelatedJoin('Role', intermediateTable='user_roles', createRelatedTable=False, joinColumn='username', otherColumn='role_id') class Role(SQLObject): class sqlmeta: table = 'roles' name = UnicodeCol(varchar=False, length=8) users = SQLRelatedJoin('User', intermediateTable='user_roles', createRelatedTable=False, joinColumn='role_id', otherColumn='username') class UserRoles(SQLObject): class sqlmeta: table = 'user_roles' username = UnicodeCol(notNull=True, varchar=False, length=8) role = ForeignKey('Role', notNull=True, cascade=True) unique = index.DatabaseIndex(username, role, unique=True) Oleg. -- Oleg Broytman http://phdru.name/ p...@phdru.name Programmers don't die, they just GOSUB without RETURN. ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ sqlobject-discuss mailing list sqlobject-discuss@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss