On Mon, Oct 07, 2013 at 11:28:21AM -0400, Michael Bayer wrote:
> 
> On Oct 7, 2013, at 6:06 AM, Julien Cigar <jci...@ulb.ac.be> wrote:
> 
> > Hello,
> > 
> > I have the following query:
> > 
> > entity = orm.with_polymorphic(
> >    Content, [Event, News]
> > )
> > 
> > q = db.Session.query(entity)
> > 
> > The "Event" class has a "country" property:
> > 
> > orm.mapper(Event, table['event'], inherits = Content,
> >    polymorphic_identity = _get_type_id('event'),
> >    properties = {
> >        'country' : orm.relationship(
> >            Country, lazy = 'joined'
> >        )
> >    })
> > 
> > I would like to order my query above with .order_by(Country.name)
> > 
> > So I tried:
> > 
> > q = q.outerjoin(Event.country).options(
> >    orm.contains_eager(Event.country)
> > ).order_by(
> >    Country.name
> > )
> > 
> > but SQLAlchemy complains with:
> > 
> > ArgumentError: Can't find property 'country' on any entity
> > specified in this Query.  Note the full path from root
> > (Mapper|Content|content) to target entity must be specified.
> 
> you need to state all work with Event in terms of the with_polymorphic 
> construct you've created:
> 
> outerjoin(entity.Event.country) 

Thank you, it works as expected with:

q = q.outerjoin(entity.Event.country).options(
    orm.contains_eager(entity.Event.country)
).order_by(
    Country.name
)

> 
> this is documented about midway through 
> http://docs.sqlalchemy.org/en/rel_0_8/orm/inheritance.html#with-polymorphic , 
> though maybe a little buried.
> 

-- 
No trees were killed in the creation of this message.
However, many electrons were terribly inconvenienced.

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to