On 11/02/2015 09:16 AM, Mattias Lagergren wrote: > Hi, > > I'm trying to use load_only and joinedload on a relationship > model.Asset.parent. The parent relation is polymorphic and can be either > Task or Project with the common Base class called Context. > > | > importsqlalchemy.orm > importsqlalchemy.inspection > > entity =model.session.query( > model.Asset > ).options( > sqlalchemy.orm.joinedload('parent').load_only( > 'context_type','name','link' > ) > ).first() > > state =sqlalchemy.inspection.inspect(entity.parent) > forattribute instate.attrs: > is_loaded =( > attribute.loaded_value isnot > sqlalchemy.orm.base.NO_VALUE > ) > ifis_loaded: > printattribute.key > > # Output: > id > taskid > name > context_type > > | > > The id, name and context_type is from Context. And taskid is primary key > on the taskid and is a foreignkey to the context.id. As you can see > "name" loads fine but "link" attribute is not loaded. The "link" column > is added as a column_property to Context using a __declare_last__.
does "link" load if you *dont* specify load_only? does it *ever* load? What's a LinkTypeDecorator and what's "query"? seems like you're doing something odd there. Can't do anything without fully working code (see http://stackoverflow.com/help/mcve). > > These are simplified versions of the classes: > > | > > classContext(Base): > '''Represent a context.''' > context_type =Column(Unicode(32),nullable=False) > > __mapper_args__ ={ > 'polymorphic_on':context_type, > 'polymorphic_identity':'context' > } > > name =Column(Unicode(255),default=u'',nullable=False) > > @declared_attr > defid(cls): > returnColumn(CHAR(36),primary_key=True,default=lambda:str(uuid())) > > @classmethod > def__declare_last__(cls): > '''Return link expression query.''' > > ... > > cls.link =column_property( > sqlalchemy.type_coerce( > query,LinkTypeDecorator > ).label('link') > ) > > classTask(Context): > '''Represent a task.''' > > taskid =Column( > types.CHAR(36), > ForeignKey('context.id'), > primary_key=True > ) > > __mapper_args__ ={ > 'polymorphic_identity':'task' > } > > > classAsset(Base): > '''Represent an Asset.''' > > context_id =sqlalchemy.Column( > sqlalchemy.CHAR(36),sqlalchemy.ForeignKey('context.id') > ) > > parent =relationship('Context',backref=backref('assets')) > > | > > Can you see if I'm doing something wrong? > > -- > 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 > <mailto:sqlalchemy+unsubscr...@googlegroups.com>. > To post to this group, send email to sqlalchemy@googlegroups.com > <mailto:sqlalchemy@googlegroups.com>. > Visit this group at http://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 http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.