Awesome idea, thanks for the reply! I ended up combining this approach with the callable_ argument and don't have to explicitly pass the argument now at all.
This is a great approach and it is fairly simple as well. Thank you a lot. On Friday, 5 August 2016 00:24:30 UTC+10, Mike Bayer wrote: > > > > On 08/04/2016 10:14 AM, Florian Rüchel wrote: > > I have a relationship that depends on a query time variable to determine > > the correct join. The use case is request-time localization in a web > > application. When running the query during a request, I want to > > determine the locale and only load the translation for the current > > language for a given object. However, the primaryjoin condition callable > > is evaluated at mapping time instead which only happens once instead of > > on every request. > > > > Here is a quick sample: > > > > def get_myobj_primaryjoin(): > > return and_(MyObj.id == MyObjI18N.obj_id, request.locale == > > MyObjI18N.lang) > > > > > > class MyObj(Base): > > id = Column(Integer, primary_key=True) > > _current_translation = relationship(MyObjI18N, uselist=False, > > primaryjoin=get_myobj_primaryjoin, lazy='joined') > > > > > > class MyObjI18N(Base): > > obj_id = Column(ForeignKey(MyObj.id), primary_key=True) > > lang = Column(String) > > > > This should give a rough idea of the issue: request.locale changes at > > query time, that is, if I do MyObj.query in two different requests, it > > won't work, it will always take the first time it was called. > > > > Note that I was previously using a with_transformation approach when > > building the query but I wanted to remove the necessity to add that > > every time a build a query and would have it much rather built > implicitly. > > > > Any ideas are highly appreciated, no argument I can pass to > > "relationship" seems to help my use case. > > > we use a bound parameter for this and a recipe for getting a value in > there can be seen at > https://bitbucket.org/zzzeek/sqlalchemy/wiki/UsageRecipes/GlobalFilter . > In particular the lazyload case can only be affected using a custom > MapperOption as described near the bottom of that recipe. > > > > > > > -- > > 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+...@googlegroups.com <javascript:> > > <mailto:sqlalchemy+unsubscr...@googlegroups.com <javascript:>>. > > To post to this group, send email to sqlal...@googlegroups.com > <javascript:> > > <mailto:sqlal...@googlegroups.com <javascript:>>. > > Visit this group at https://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > -- 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 https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.