2017-06-05 13 views
0

2つのモデルを接続したいと思います。SQLAlchemy ManyToOne関係の問題

モデル#1は「グループ」と呼ばれます。 starter_id、main_id、dessert_idを介していくつかの "チーム"に接続されています。私は、チームと呼ばれるフィールドを持っていて、すべてのチームのリストを含んでいます。

class Group(db.Model): 
    __tablename__ = 'groups' 
    id = db.Column(db.Integer, primary_key=True) 
    starter_id = db.Column(db.Integer, db.ForeignKey('teams.id')) 
    main_id = db.Column(db.Integer, db.ForeignKey('teams.id')) 
    dessert_id = db.Column(db.Integer, db.ForeignKey('teams.id')) 

    #Relationships 
    teams = db.relationship('Team', back_populates="group", foreign_keys= \ 
    [starter_1_id, starter_2_id, starter_3_id, main_1_id, main_2_id, main_3_id, \ 
    dessert_1_id, dessert_2_id, dessert_3_id]) 


class Team(db.Model): 
    __tablename__ = 'teams' 
    id = db.Column(db.Integer, primary_key=True) 
    group_id = db.Column(db.Integer, db.ForeignKey('groups.id')) 

    # Relationships 
    group = db.relationship("Group", back_populates="teams", foreign_keys=[group_id]) 

私はこのエラーを取得する:

sqlalchemy.exc.AmbiguousForeignKeysError: Could not determine join condition 
between parent/child tables on relationship Group.teams - there are multiple 
foreign key paths linking the tables. Specify the 'foreign_keys' argument, 
providing a list of those columns which should be counted as containing a 
foreign key reference to the parent table. 

私は、明らかにそのエラーを修正する方法がわからない;)

答えて

0

"チームがグループに属している" 関係(Team.group)とその逆は、 "グループには多くのチームがあります"(Group.teams)、外部キーTeam.group_idによって与えられるので、あなたは書く必要があります:

teams = db.relationship('Team', back_populates="group", foreign_keys=lambda: Team.group_id) 
+0

ありがとうございます。あなたは私にラムダが何をしているかのヒントを教えてもらえますか? – Jan

+0

'Group'と' Team'はそれぞれの定義に依存しているので、関係を定義するときに 'Team'という値を持たないので' lambda'が必要です。 SQLAlchemyは、このような循環依存関係を解決するために 'relationship'のいくつかのパラメータに関数を渡すことをサポートしています。 – univerio