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 [email protected].
> To unsubscribe from this group, send email to 
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to