I looked at this further, i think I got it working half way.
Index: lib/sqlalchemy/orm/util.py
===================================================================
--- lib/sqlalchemy/orm/util.py (revision 6072)
+++ lib/sqlalchemy/orm/util.py (working copy)
@@ -387,6 +387,7 @@
if left_mapper or right_mapper:
self._orm_mappers = (left_mapper, right_mapper)
+ parent_mapper = onclause.parententity._AliasedClass__mapper
if isinstance(onclause, basestring):
prop = left_mapper.get_property(onclause)
elif isinstance(onclause, attributes.QueryableAttribute):
@@ -411,6 +412,9 @@
onclause = sj
else:
onclause = pj
+
+ if parent_mapper._single_table_criterion:
+ onclause = sql.and_(onclause,
parent_mapper._single_table_criterion)
self._target_adapter = target_adapter
expression.Join.__init__(self, left, right, onclause, isouter)
It works for queries of the form :
items =
session
.query
(Item).with_polymorphic([FooItem]).options(eagerload(FooItem.child))
but not :
items = session.query(Item).with_polymorphic([FooItem,
BarItem]).options(eagerload(FooItem.foochild, BarItem.barchild))
I'll keep trying around for a solution that solves the above, and then
hopefully someone more knowledgeable can pick it up or guide me.
- Jae
On Aug 28, 2009, at 4:43 PM, Jae Kwon wrote:
>
> I've seen similar discussions here, but it's been a while so perhaps
> things have changed.
>
> class Foo(Base):
> __tablename__ = 'foo'
> type = Column(Integer)
> __mapper_args__ = {'polymorphic_on': type}
> ...
>
> class BarFoo(Foo):
> __mapper_args__ = {'polymorphic_identity': 1}
> bar_id = Column(Integer)
> # relations
> bar = relation('Bar')
>
> class BazFoo(Foo):
> __mapper_args__ = {'polymorphic_identity': 2}
> baz_id = Column(Integer)
> # relations
> baz = relation('Baz')
>
> ## assume existence of Bar and Baz objects
>
> Is there a way to say, query all Foo objects while eager-loading the
> bar/baz relations?
>
> - Jae
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---