On Feb 10, 2010, at 10:17 AM, Andrija Zarić wrote:
> Let's say I've got simple structure Order-->Item-->Detail.
>
> class Detail(Base):
> ...
>
> class Order(Base):
> ...
>
> class Item(Base):
> ...
> detail = relation(Detail, uselist=False, lazy=False)
> order = relation(Order, uselist=False, backref='items')
>
> Of course I can specify order_by for Order.items by any columns from
> Item, but is there a way I can order_by a column defined in Detail?
>
> I've naively tried something as backref('items', order_by=Detail.id),
> but because Detail is anonymously joined to Item as e.g. 'details_1',
> I've received ProgrammingError: invalid reference to FROM-clause
> entry for table "details".
The Order.items collection doesn't have the ability to order by a remote column
in the collection, unless you set the order_by to a subquery that joined out to
the ultimate target you care about.
Maybe, I haven't tried this, you could make an alternate (non primary) mapping
to Item that was a join of Item and Detail, i.e. like:
itemdetail = mapper(Item.__table__.join(Detail.__table__), non_primary=True)
Order.items = relation(itemdetail, order_by=itemdetail.c.detail_id)
I'm not 100% sure the non-primary mapper allowing additional attributes, and it
might need to be a mapping of a select().select_from(join) and not the join
directly, but if you have some time to experiment you might get something out
of that.
>
> --
> 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.