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/ ph...@ph...
Programmers don't die, they just GOSUB without RETURN.
|