Thanks, Mike!

Your example indeed works, but unfortunately when I add inheritance,
mapper fails to generate proper (inherited) class:
(I've changed code a little, so it represents more what I'm trying to
do)

from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite://', echo=True)
Base = declarative_base()

class Detail(Base):
   __tablename__ = 'detail'
   id = Column(Integer, primary_key=True)
   sort = Column(Integer)

class Order(Base):
   __tablename__ = 'order'
   id = Column(Integer, primary_key=True)

class Item(Base):
   __tablename__ = 'item'
   id = Column(Integer, primary_key=True)
   order_id = Column(Integer, ForeignKey('order.id'))
   detail_id = Column(Integer, ForeignKey('detail.id'))

   detail = relation(Detail, uselist=False, lazy=False)
   order = relation(Order, uselist=False)
   type = Column(String(20))
   __mapper_args__ = { 'polymorphic_on' : type}


class ValueItem(Item):
   __mapper_args__ = { 'polymorphic_identity' : 'quantity' }
   value = Column('quantity_value', Numeric(15, 4))


class ErrorItem(Item):
   __mapper_args__ = { 'polymorphic_identity' : 'error' }
   value = Column('error_value', String(15, 4))


Order.items  = relation(Item)
j = Item.__table__.join(Detail.__table__)
itemdetail = mapper(Item, j, non_primary=True)
Order.sorteditems = relation(itemdetail,
order_by=Detail.__table__.c.sort, viewonly=True)

metadata = Base.metadata
metadata.create_all(engine)
Session = scoped_session(sessionmaker(bind=engine))

order = Order(id=1)
Session.add(order)
detail = Detail(id=1, sort=1)
order.items.append(ValueItem(id=1, detail=detail))

Session.commit()

for order in Session.query(Order).all():
    for item in order.sorteditems:
        print item
    for item in order.items:
        print item

...
<__main__.Item object at 0x881ddac>

<__main__.ValueItem object at 0x960da6c>


Am I making a obvious mistake somewhere here?

-- 
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.

Reply via email to