I'm working on a database where the relation between users and objects
is defined by an association table that looks like:

role_objects_table = Table("role_objects", metadata,
   Column("objects_id", Integer,
          ForeignKey("objects.objects_id"),
          primary_key=True),
   Column("role",Role_Type),
   Column("user_id", Integer,
          ForeignKey("tg_user.user_id"),
          primary_key=True))

Where Role_Type is an Enum class that translates roles onto Unicode(1).

And Objects is mapped like so:

assign_mapper(session.context, Objects, objects_table, properties = dict(
    #...
    responsibles = relation(User, secondary=role_objects_table,
            primaryjoin = and_(objects_table.c.objects_id ==
role_objects_table.c.objects_id,
                              role_objects_table.c.role == 'R')),
    approvers = relation(User, secondary=role_objects_table,
            primaryjoin = and_(objects_table.c.objects_id ==
role_objects_table.c.objects_id,
                              role_objects_table.c.role == 'A')),
   #...
)

So basically the relationship between users and objects is typed by
the role field. This is a textbook use case for the use of an
association object, but using an association object is really
annoying. I would really like to be able to treat each relation as a
normal many to many relation and not have to create intermediate
objects just to set one field to a constant value.

In looking through the archives I found:

> You could go more nuts with [object properties] by having the list be a
> subclass of "list" which properly does mutation operations too, creates
> the association objects automatically, etc.

Which seems to be what I'm looking to do. I'm assuming that the "list"
referenced here is custom collection_class, but I don't see any
obvious hooks into the secondary table and trying to manage the state
of intermediate objects is more work than I'd like.

In looking through the code, I noticed
sqlalchemy.orm.attributes.AttributeExtension, which makes it pretty
easy to hook into the event I'm interested in, but I'm having trouble
finding a reference to the secondary table.

Any guidance would be appreciated.

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to