Как мне дважды обратиться к таблице внешнего ключа?
Я получаю следующую ошибку:
u'detail ': u "Один или несколько сопоставителей не удалось инициализировать - невозможно продолжить инициализацию других сопоставителей. Первоначальное исключение было: не удалось определить условие соединения между родительскими / дочерними таблицами в отношении Vote.user - существует несколько внешних ключей пути, связывающие таблицы. Укажите аргумент foreign_keys, предоставляющий список тех столбцов, которые должны учитываться как содержащие ссылку внешнего ключа на родительскую таблицу."
Таблица A
определяется как:
class User(postgres.Model):
def __init__(self,
name
):
self.name = name
id = postgres.Column(postgres.Integer , primary_key=True , autoincrement=True)
name = postgres.Column(postgres.String(32) , nullable=False , unique=True)
Таблица B
определяется как:
class Vote(postgres.Model):
def __init__(self,
user_id,
responder_id,
#timestamp_request,
#timestamp_respond,
value
):
self.user_id = user_id
self.responder_id = responder_id
#self.timestamp_request = timestamp_request
#self.timestamp_respond = timestamp_respond
self.value = value
id = postgres.Column(postgres.Integer , primary_key=True , autoincrement=True)
user_id = postgres.Column(postgres.Integer , postgres.ForeignKey('user.id'))
user = postgres.relationship(User , backref=postgres.backref('votes_user'))
responder_id = postgres.Column(postgres.Integer , postgres.ForeignKey('user.id'))
responder = postgres.relationship(User , backref=postgres.backref('votes_responder'))
timestamp_request = postgres.Column(postgres.DateTime , default=datetime.datetime.utcnow , nullable=False , unique=False)
timestamp_respond = postgres.Column(postgres.DateTime , default=datetime.datetime.utcnow , onupdate=datetime.datetime.utcnow , nullable=False , unique=False)
value = postgres.Column(postgres.Enum('up' , 'down' , name='vote_value_enum') , nullable=True)
1 ответ
SQLAlchemy не может найти путь отношений.
user_id = Column(ForeignKey('user.id'))
user = relationship(User, backref=backref('votes_user'))
responder_id = Column(ForeignKey('user.id'))
responder = relationship(User, backref=backref('votes_responder'))
Сделать responder
отношения должны присоединиться с помощью responder_id
или же user_id
? Я знаю, что это очевидно для нас, но SQLAlchemy не учитывает имена столбцов здесь. Вы можете переименовать responder_id
как foobar
и это не будет иметь никакого значения.
Определите внешние ключи, которые вы хотите использовать для каждого отношения.
user = relationship(User, foreign_keys=[user_id], backref=backref('votes_user'))
responder = relationship(User, foreign_keys=[responder_id], backref=backref('votes_responder'))