У меня много отношений между одной и той же таблицей, и я хочу определить их в Flask-AppBuilder. Например, отношение родитель-потомок между людьми, где оба экземпляра принадлежат одной и той же таблице Human. Однако, когда я это делаю, я получаю сообщение об ошибке:
Ошибка
sqlalchemy.exc.NoForeignKeysError: Не удалось определить условие соединения между родительскими и дочерними таблицами в отношении Human.child — внешние ключи, связывающие эти таблицы, отсутствуют. Убедитесь, что ссылающиеся столбцы связаны с ForeignKey или ForeignKeyConstraint, или укажите выражение 'primaryjoin'.
Пример models.py
from flask_appbuilder import Model
from sqlalchemy import Column, String, ForeignKey
from sqlalchemy.orm import relationship
class HumanHasChild(Model):
parent_id = Column(String(200), ForeignKey("Human.id"), primary_key=True)
child_id = Column(String(200), ForeignKey("Human.id"), primary_key=True)
class Human(Model):
id = Column(String(200), primary_key=True)
child = relationship("HumanHasChild", foreign_keys="HumanHasChild.child_id")
Вопреки сообщению об ошибке, я указываю внешний ключ три раза. Однако я также попытался добавить явное условие соединения:
class Human(Model):
id = Column(String(200), primary_key=True)
child = relationship("HumanHasChild", foreign_keys="HumanHasChild.child_id",primaryjoin="Human.id==HumanHasChild.parent_id")
Однако даже тогда я получаю сообщение об ошибке:
sqlalchemy.exc.ArgumentError: не удалось найти какие-либо соответствующие столбцы внешнего ключа для основного условия соединения «human.id = human_has_child.parent_id» в отношении Human.child. Убедитесь, что ссылающиеся столбцы связаны с ForeignKey или ForeignKeyConstraint или помечены в условии соединения аннотацией foreign().
Как я могу заставить работать отношения «многие ко многим» в одной таблице?