Отношение многие ко многим в sqlAlchemy с двумя внешними ключами к одной таблице - PullRequest
0 голосов
/ 28 июня 2018

У меня есть такие модели классов:

class Application(Base):
    __tablename__ = 'applications'
    identifier = Column(Integer, primary_key=True)
    name = Column(String)
    description = Column(String)

    level1 = relationship("Teams", secondary='assoc_apps_teams', back_populates='support_1')
    level2 = relationship("Teams", secondary='assoc_apps_teams', back_populates='support_2')


class Teams(Base):
    __tablename__ = 'teams'

    identifier = Column(Integer, primary_key=True)
    name = Column(String)
    description = Column(String)

    support_1 = relationship("Application", secondary='assoc_apps_teams', back_populates='level1')
    support_2 = relationship("Application", secondary='assoc_apps_teams', back_populates='level2')


class AssocAppsTeams(Base, DictSerializable):
    __tablename__ = 'assoc_apps_teams'

    identifier = Column(Integer, primary_key=True)
    apps_id = Column(Integer, ForeignKey("applications.identifier"), nullable=False) 
    support1_id = Column(Integer, ForeignKey("teams.identifier"), nullable=False) 
    support2_id = Column(Integer, ForeignKey("teams.identifier"), nullable=False) 

if __name__ == "__main__":
  app = model.Application("app", "desc")
  session.add(app)    
  session.commit()
  session.close()

Учитывая, что приложение имеет 2 уровня поддержки, каждый уровень может иметь одну или несколько групп (каждая поддержка - команда).

Когда я запускаю свой скрипт, я получаю эту ошибку:

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

В этом случае у меня есть отношение многие ко многим: приложение управляется двумя уровнями поддержки, которые являются командами, и каждая поддержка может управлять более чем одним приложением. Как правильно сопоставить эти отношения ??

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...