Exactly what I was looking for! Thanks a ton, I did not realize I could actually do that and went spelunking down hybrid properties.

Thanks again.
AM

On 08/04/2013 07:34 AM, Michael Bayer wrote:
you want to flatten the scalar attributes to combine the namespace of OrgModel and 
OrgMemberModel into one.    there's no magic there you just have to proxy them all, 
here's "name":

class OrgMemberModel(Base):
     __tablename__ = 'org_member'

     user_id = Column(Integer, ForeignKey('user.id'), primary_key=True)
     org_id = Column(Integer, ForeignKey('org.id'), primary_key=True)
     active = Column(Boolean, nullable=False, default=True)
     role = Column(String(64), nullable=False, default='member')

     user = relationship('UserModel',
                     backref=backref('org_membership', cascade='all, 
delete-orphan'))

     org = relationship('OrgModel')

     name = association_proxy("org", "name")

u1 = UserModel()
u1.org_membership.append(OrgMemberModel(role='r1', org=OrgModel(name='o1')))

assert u1.org_membership[0].role == 'r1'
assert u1.org_membership[0].name == 'o1'

u1.org_membership[0].name = 'o2'
assert u1.org_membership[0].name == 'o2'



On Aug 4, 2013, at 4:03 AM, AM <ams....@gmail.com> wrote:

On 08/03/2013 09:38 AM, Michael Bayer wrote:
On Aug 2, 2013, at 2:32 PM, Ams Fwd <ams....@gmail.com> wrote:

Hi All.

Is there any way to transparently add the properties of the associated object 
to the association proxy?

For e.g. if I have the following setup

class UserModel(Base):
     name = sa.Column(sa.String(512))
     orgs = association_proxy('org_member', 'org')


class OrgModel(Base):
     name = sa.Column(sa.String(256), unique=True)

class OrgMemberModel(Base):
     __tablename__ = 'org_member'

     user_id = sa.Column(sa.Integer, sa.ForeignKey('user.id'),
             primary_key=True)
     org_id = sa.Column(sa.Integer, sa.ForeignKey('org.id'),
             primary_key=True)
     active = sa.Column(sa.Boolean, nullable=False, default=True)
     role = sa.Column(sa.String(64), nullable=False, default='member')

     user = relationship('UserModel', backref=backref('org_membership',
                     cascade='all, delete-orphan'))
     org = relationship('OrgModel')

What I would like to be able to do is access the properties of the OrgModel & 
OrgMemberModel via the org_membership[i] object.

Currently I have to do the following:

user.org_membership[0].organization.name
user.org_membership[0].role

Ideally I would like to be able to do:

user.org_membership[0].name
user.org_membership[0].role

Any help would be greatly appreciated.
on UserModel you'd have an association proxy from "org_membership" to "org".  Not sure 
what "org_member" is.
Hi Michael.

I think that is what I have. org_member is the many-to-many relation table 
between User and Org.  org_membership in this case is the backref from the 
relation into the user table.

My problem is that the backref (as expected) provides the relation property and 
another property that points to the org at the other end of the relation 
between user and org.

What I want is a technique that does not require that extra level of 
indirection:

user->org_membership->org->org_property

and instead simply be able to do:

user->org_membership->org_property.

Thanks.

AM

--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.



--
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to