2016-05-11 2 views
3

Привет Я использую флягу и SQLAlchemy, я пытаюсь получить отношения матчи в команде, чтобы получить все матчи ли он или нет team1 или team2 (так, что я хочу, чтобы иметь возможность получить все матчи для данной команды через атрибут матчей независимо, если это team1 или team2 в Match таблицы), я получаю ошибку:колба SQLAlchemy несколько внешних ключей в отношениях

sqlalchemy.exc.AmbiguousForeignKeysError: не мог определить условие соединения между родительскими/дочерними таблицами по отношениям Team.matches

Существует несколько путей внешнего ключа, связывающих таблицы. Укажите аргумент foreign_keys, указав список тех столбцов, которые должны быть подсчитаны как содержащие ссылку на внешний ключ для родительской таблицы.

class Match(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    map = db.Column(db.String(80), index=True) 
    date = db.Column(db.DateTime, index=True) 
    agreed = db.Column(db.Boolean) 
    done = db.Column(db.Boolean) 
    ladder_id = db.Column(db.Integer, db.ForeignKey('ladder.id')) 
    team1_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    team2_id = db.Column(db.Integer, db.ForeignKey('team.id')) 
    team1_rounds = db.Column(db.Integer) 
    team2_rounds = db.Column(db.Integer) 
    team1_accepted_score = db.Column(db.Boolean) 
    team2_accepted_score = db.Column(db.Boolean) 
    points = db.Column(db.Integer) 

    team1 = db.relationship('Team', foreign_keys='Match.team1_id') 
    team2 = db.relationship('Team', foreign_keys='Match.team2_id') 

class Team(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(80), index=True) 
    tag = db.Column(db.String(20), index=True, unique=True) 
    captain_id = db.Column(db.Integer, db.ForeignKey('user.id')) 
    captain = db.relationship('User', uselist=False, 
       foreign_keys='Team.captain_id') 
    members = db.relationship('User', backref='team', 
       foreign_keys='User.team_id', lazy='dynamic') 
    matches = db.relationship('Match', 
       foreign_keys='[Match.team1_id, Match.team2_id]', lazy='dynamic') 

ответ

5

я получил помощь от ребят на #sqlalchemy ИРЦ так я собирался с неправильным подходом Я теперь настроить отношения с primaryjoin вместо:

matches = db.relationship('Match', primaryjoin="or_(Team.id==Match.team1_id, Team.id==Match.team2_id)", lazy='dynamic') 
Смежные вопросы