Связь Flask-AppBuilder «многие ко многим» в одной таблице

У меня много отношений между одной и той же таблицей, и я хочу определить их в 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().

Как я могу заставить работать отношения «многие ко многим» в одной таблице?


person Konrad Höffner    schedule 08.09.2020    source источник


Ответы (1)