On Feb 11, 2014, at 9:38 PM, Eric Atkin <eat...@certusllc.us> wrote:

> Hi,
> I want to override a relationship in a subclass to relate to a subclass of 
> the base attributes' related class. Perhaps an example of how I thought it 
> should work:
> 
> {{{
> class Load(Base):
>     __tablename__ = 'load'
>     __mapper_args__ = {
>         'polymorphic_identity':'load',
>         'polymorphic_on':'polymorphic_type',
>     }
>     id = Column(Integer, primary_key=True)
>     polymorphic_type = Column(Text, nullable=False)
>     source_id = Column(Integer, ForeignKey('source.id'))
>     source = relationship('Source')
> 
> class Production_Load(Load):
>     __tablename__ = 'production_load'
>     __mapper_args__ = { 'polymorphic_identity':'production_load' }
>     id = Column(Integer, ForeignKey('load.id'), primary_key=True)
>     source_id = Column(Integer, ForeignKey('measured_source.id'))
>     source = relationship('Measured_Source')
> 
> class Source(Base):
>     __tablename__ = 'source'
>     __mapper_args__ = {
>         'polymorphic_identity':'source',
>         'polymorphic_on':'polymorphic_type',
>     }
>     id = Column(Integer, primary_key=True)
>     polymorphic_type = Column(Text, nullable=False)
> 
> class Measured_Source(Source):
>     __tablename__ = 'measured_source'
>     __mapper_args__ = { 'polymorphic_identity':'measured_source' }
> 
>     id = Column(Integer, ForeignKey('source.id'), primary_key=True)
> }}}
> 
> As you can see, we have Load.source -> Source and I want 
> Production_Load.source -> Measured_Source, but when I import the models, I 
> get the following warning:
> 
> {...}/env/lib/python2.7/site-packages/sqlalchemy/orm/properties.py:1028: 
> SAWarning: Warning: relationship 'source' on mapper 
> 'Mapper|Production_Load|production_load' supersedes the same relationship on 
> inherited mapper 'Mapper|Load|load'; this can cause dependency issues during 
> flush
> 
> and when I try to use Production_Load.source (class level attr) in a query, I 
> get the following error:
> 
> AttributeError: Neither 'InstrumentedAttribute' object nor 'Comparator' 
> object associated with Production_Load.source has an attribute 'conversion'
> 
> Is such a thing possible, even with a re-factor of the models?

“conversion” sounds like an attribute name on your end, but generally being 
able to supersede a relationship like that when the inheritance is not 
“concrete” is not supported.  you’d need to name it to something else.

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

Reply via email to