AbstractA is AbstractB "base" class......... AbstractB is ClassA "base" class............
Everything work fine in this case. I just want to set 'polymorphic_identity' on each inheritance level if I set by hand : update abstract_a set class_name = 'class_a' : AbstractA.query.first() give me back a ClassA object 2010/8/15 Michael Bayer <mike...@zzzcomputing.com> > > On Aug 15, 2010, at 6:52 AM, jean-philippe serafin wrote: > > > Hi, > > > > I've got a class mapping with two polymorphic inheritance : > > > > class AbstractA(Base): > > > > __tablename__ = "abstract_a" > > > > id = Column(Integer, primary_key=True) > > class_name = Column('class_name', String(50)) > > > > __mapper_args__ = { > > 'polymorphic_on': class_name, > > } > > #some stuff here > > > > class AbstractB(AbstractA): > > > > __tablename__ = "abstract_b" > > > > id = Column(Integer, ForeignKey('abstract_a.id'), > > primary_key=True) > > class_name = Column('class_name', String(50)) > > > > __mapper_args__ = { > > 'polymorphic_on': class_name, > > 'polymorphic_identity': __tablename__, > > } > > #some stuff here > > > > class ClassA(AbstractB): > > > > __tablename__ = "table_a" > > __mapper_args__ = { > > 'polymorphic_identity': __tablename__, > > } > > > > id = Column(Integer, ForeignKey('abstract_b.id'), > > primary_key=True) > > label = Column('label', String(50)) > > > > def __init__(self, label): > > self.label = label > > > > I persist a ClassA object : > > > > object = ClassA('toto') > > db_session.add(object) > > db_session.commit() > > > > When I try to reload the object like this : > > > > reloaded_object = AbstractB.query.first() > > > > I get back a ClassA object (just fine) > > > > but when I try to reload like this : > > > > reloaded_object = AbstractA.query.first() > > > > I get back a AbstractA object because abstract_a.class_name has not > > been set to polymorphic_identity. > > > > Is this an issue or expected work? > > polymorphic_on only goes on the base class. SQLA should be changed to > raise an error on the setup you have above. > > > > > > -- > > 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<sqlalchemy%2bunsubscr...@googlegroups.com> > . > > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > > > > -- > 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<sqlalchemy%2bunsubscr...@googlegroups.com> > . > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > > -- 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.