@All: Happy New Year, folks! On Thu, Dec 30, 2010 at 05:50:30PM -0800, Simon Laalo wrote: > class User(SQLObject): > class sqlmeta: > table = 'users' > username = UnicodeCol(alternateID=True, varchar=False, > length=8,alternateMethodName='by_username') > roles = SQLRelatedJoin('Role', joinColumn='username', > intermediateTable='user_roles', createRelatedTable=False, orderBy='ordinal') > > > class Role(SQLObject): > class sqlmeta: > table = 'roles' > name = UnicodeCol(varchar=False, length=8) > > users = SQLRelatedJoin('User', intermediateTable='user_roles', > createRelatedTable=False, otherColumn='username') > > class UserRoles(SQLObject): > class sqlmeta: > table = 'user_roles' > > username = ForeignKey('User',notNull=True, cascade=True) > role = ForeignKey('Role', notNull=True, cascade=True) > ordinal = IntCol(notNone=True) > unique = index.DatabaseIndex(username, role, unique=True) > > and when I call role.users I get the following error: > > ProgrammingError: operator does not exist: integer = character LINE 1: > ...user_roles, roles WHERE ((users.id = user_roles.username...
Aha, I see problems with this approach. First, ForeignKey is implemented using an INT column referencing id column of the corresponding table, so ForeignKey cannot be used in the intermediate table. It has to be replaced with a UnicodeCol, and you loose `cascade`. 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) 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