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

Reply via email to