[Sqlalchemy-tickets] Issue #4110: "AttributeError: parent" when using association_proxy on polymorp
Brought to you by:
zzzeek
From: Kai K. <iss...@bi...> - 2017-10-12 09:05:00
|
New issue 4110: "AttributeError: parent" when using association_proxy on polymorphic mapping https://bitbucket.org/zzzeek/sqlalchemy/issues/4110/attributeerror-parent-when-using Kai Kölger: MCVE: ``` #!python from sqlalchemy import create_engine, Integer from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy.schema import Column, ForeignKey Session = sessionmaker() engine = create_engine('sqlite:///:memory:') Session.configure(bind=engine) Base = declarative_base() _session = Session() class A1(Base): __tablename__ = 'a1' id = Column(Integer, primary_key=True) obj_type = Column(Integer) __mapper_args__ = { 'polymorphic_on': obj_type, 'polymorphic_identity': 1, } class ARef(Base): __tablename__ = 'aref' id = Column(Integer, primary_key=True) referer_id = Column(Integer, ForeignKey('a1.id')) refered_id = Column(Integer, ForeignKey('a1.id')) refered = relationship( 'A1', uselist=False, primaryjoin='a1.id == aref.refered_id') class A2(A1): __mapper_args__ = {'polymorphic_identity': 2} class A3(A1): __mapper_args__ = {'polymorphic_identity': 3} _a2_ref = relationship('ARef') a2_list = association_proxy(_a2_ref, 'refered') Base.metadata.create_all(engine) ``` The goal was to have a collection of references between some of the derived classes of A1. The MCVE produces with sqlalchemy 1.1.14 this stack trace: ``` #! Traceback (most recent call last): File "_experiment5.py", line 47, in <module> class A3(A1): File "_experiment5.py", line 51, in A3 a2_list = association_proxy(_a2_ref, 'refered') File "/home/kk/ve/arc2/lib/python3.4/site-packages/sqlalchemy/ext/associationproxy.py", line 76, in association_proxy return AssociationProxy(target_collection, attr, **kw) File "/home/kk/ve/arc2/lib/python3.4/site-packages/sqlalchemy/ext/associationproxy.py", line 156, in __init__ type(self).__name__, target_collection, id(self)) File "/home/kk/ve/arc2/lib/python3.4/site-packages/sqlalchemy/orm/relationships.py", line 1445, in __str__ return str(self.parent.class_.__name__) + "." + self.key File "/home/kk/ve/arc2/lib/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 850, in __getattr__ return self._fallback_getattr(key) File "/home/kk/ve/arc2/lib/python3.4/site-packages/sqlalchemy/util/langhelpers.py", line 828, in _fallback_getattr raise AttributeError(key) AttributeError: parent ``` |