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.

Reply via email to