2017-07-12 9 views
0

私はhistory_metaレシピが見つかりましたhere私の宣言的オブジェクトをバージョン化しています。しかし、2つのモデルの間に双方向の関係があると、マッパーは他のモデルのマッパーの検索/初期化に失敗します。そうですね。history_metaバージョンマッパーが双方向の関係で例外をスローする

class Child(Versioned, Base): 
    __tablename__ = 'child' 
    id = Column(Integer, primary_key=True) 
    parent_id = Column(Integer, ForeignKey("parent.id")) 
    parent = relationship("Parent", back_populates="children") 


class Parent(Versioned, Base): 
    __tablename__ = 'parent' 
    id = Column(Integer, primary_key=True) 
    children = relationship("Child", back_populates="parent") 

は、クラス定義以下の関係を移動するエラーに

sqlalchemy.exc.InvalidRequestError: When initializing mapper Mapper|Child|child, expression 'Parent' failed to locate a name ("name 'Parent' is not defined"). If this is a class name, consider adding this relationship() to the <class '__main__.Child'> class after both dependent classes have been defined. 

を与える問題を修正しますが、これは望ましくないソリューションです。履歴メタによって呼び出されるマッパーは、呼び出される前にすべての関連するクラスを作成する必要があるようです。

このように、双方向関係でhistory_metaを動作させる方法はありますか?

答えて

0

この問題を回避するには、back_populatesの代わりにbackrefを使用することをお勧めします。例は次のようになります:

class Child(Versioned, Base): 
    __tablename__ = 'child' 
    id = Column(Integer, primary_key=True) 
    parent_id = Column(Integer, ForeignKey("parent.id")) 


class Parent(Versioned, Base): 
    __tablename__ = 'parent' 
    id = Column(Integer, primary_key=True) 
    children = relationship("Child", backref="parent") 
関連する問題