2011-09-29 10 views
0

今、モデルに問題があります。私はこれら2つ(1)(2)の質問に出くわしてくれましたが、今は頑張っています。SQLAlchemyのポリモーフィズムを持つ自己参照テーブル

class Post(Base): 
    __tablename__ = 'post' 
    id = Column(Integer, primary_key=True) 
    type = Column('type', String(10)) 
    created = Column(TIMESTAMP(), default=datetime.now()) 
    updated = Column(TIMESTAMP(), default=datetime.now()) 
    poster_id = Column(Integer, ForeignKey('person.id')) 
    poster = relationship('Person', backref=backref('posts')) 
    __mapper_args__ = {'polymorphic_on': type} 

class Comment(Post): 
    __tablename__ = 'comment' 
    __mapper_args__ = {'polymorphic_identity': 'comment', 'inherit_condition': (id == Post.id)} 
    id = Column(Integer, ForeignKey('post.id'), primary_key=True) 
    post_id = Column(Integer, ForeignKey('post.id')) 
    post = relationship('Post', primaryjoin=('Comment.post_id == Post.id'), backref=backref('comments'), remote_side='Post.id') 
    text = Column(Text) 

私は取得しています現在の誤差がある:私は間違って何をやっている

TypeError: Incompatible collection type: int is not list-like 

ここに私の現在のコードは?ありがとう。

+0

例外のためにトレースを返送した場合には便利だと思います。 –

答えて

3

idは、実際には不幸な名前です。 idは組み込み関数なので、は常にと定義されています。主キーの主流名をあまり選択しなかった場合は、別のエラーが表示され、明らかになります。

class Comment(Post): 
    __tablename__ = 'comment' 
    __mapper_args__ = {'polymorphic_identity': 'comment', 'inherit_condition': (id == Post.id)} 
#                    ^^ 

idは、Pythonオブジェクトのアドレスを返す関数である、__builtins__.idを参照すること。おそらくあなたが意味するものではありません。

簡単な解決策:idのエイリアスが実際のテーブルの列を意味する行の下の__mapper_args__を移動します。