On May 5, 2010, at 5:01 PM, Timmy Chan wrote: > i have 4 tables, a, b, c, d. > > a has one-to-many relation with b, b with one-to-one relationship with c, c > is a polymorphic on a.type, with d being one of the polymorphic types. > > is there a way to implement this? > > details: > > this is what im trying to do in sqlalchemy: > > a = Table('a', metadata, > Column( 'id', Integer(), primary_key=True ), > Column( 'type', UnicodeText() ) ) > > b = Table('b', metadata, > Column( 'id', Integer(), primary_key=True ), > Column( 'a_id', Integer(), ForeignKey('a.id') ) ) > > c = Table('c', metadata, > Column( 'id', Integer(), primary_key=True ), > Column( 'b_id', Integer(), ForeignKey('b.id') ), > Column( 'class_id', Integer() ) ) > > d = Table('d', metadata, > Column( 'id', Integer(), primary_key=True ), > Column( 'data', Integer() ) > > mappers > > mapper( A, a ) > mapper( B, b, properties={'a': relationship( A, uselist=False,backref='b', > 'c':relationship( C, uselist=False, backref='b') }) > > # Does a full join, does not work > mapper( C, c, polymorphic_on = a.c.type ) > mapper( D, d, inherits=C, polymorphic_identity = "D" ) > > > how can i change c to polymorphic on a, through the relationship? is there > a way to sort by d.data? (b-c/d is one-on-one).
this mapping is incorrect. mapper(C) cannot be polymorphic on a table which is not part of its mapping, and mapper(C) does not contain an "inherits" keyword to that of A. Usually the "polymorphic_on" setting is on the base-most mapper in the hierarchy and its not clear here which mapper you intend for that to be. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.