2016-03-23 4 views
1

は、私が子供の異なる種類によって継承されるトップレベルのモデルの宣言を持っている属性のIOは、このデータベースを構築しようとした際SQLAlchemyの隣接リストの関係は

class HasId(object): 

    @declared_attr 
    def id(cls): 
     return Column('id', Integer, Sequence('test_id_seq'), primary_key=True) 
    ... 
    @declared_attr 
     def triggered_by_id(cls): 
      return Column(Integer, ForeignKey('tests.id'), nullable=True) 

    @declared_attr 
     def triggered(cls): 
      return relationship('TestParent', 
           foreign_keys='TestParent.triggered_by_id', 
           lazy='joined', 
           cascade='save-update, merge, delete, delete-orphan', 
           backref=backref('triggered_by', remote_side=[id]) 
           ) 


class TestParent(HasId, Model): 
    __tablename__ = 'tests' 

    discriminator = Column(String(50)) 

    __mapper_args__ = {'polymorphic_on': discriminator} 


class FooTest(TestParent): 
    __tablename__ = 'footests' 
    __mapper_args__ = {'polymorphic_identity': 'footests'} 
    id = Column(Integer, ForeignKey('tests.id'), primary_key=True) 

    bar = Column(Boolean) 
    ... 

、私が定義されているかによって引き起こされるエラーを取得しますtriggered_by関係のbackrefremote_sideです。

フルエラーが

ArgumentError: Column-based expression object expected for argument 'remote_side'; got: '<built-in function id>', type <type 'builtin_function_or_method'> 
+0

なぜあなたは 'triggered'と' triggered_by_idを入れしようとしています'' TestParent'の代わりに '' HasId''に? – univerio

答えて

3

あるソリューションは

backref('triggered', remote_side='TestParent.id') 

backref('triggered', remote_side=[id]) 

からbackref定義を変更することです

関連する問題