2010-11-14 3 views
9

Я пытаюсь сделать самореферентное отношение «многие ко многим» (это означает, что Line может иметь много родительских строк и много дочерних строк) в sqlalchemy, как это:Многосвязное отношение к себе в sqlalchemy

Но я получаю следующее сообщение об ошибке: sqlalchemy.exc.ArgumentError: не удалось определить условия соединения между родителем/ дочерние таблицы на отношения Line.next_lines. Укажите «primaryjoin» expressio n. Если присутствует «вторичный», требуется также «secondaryjoin».

Вы знаете, как я мог исправить это?

+0

Я попытался это: next_lines = отношения (Ассоциация, backref = "prev_lines", primaryjoin = идентификатор == Association.next_id) prev_lines = отношения (Association, backref = "next_lines", primaryjoin = id == Association.prev_id) Теперь он не вызывает никаких ошибок. Это правильное решение? Или это вызовет другие проблемы? – mike

ответ

5

Вы должны просто необходимо:

prev_lines = relationship(Association, backref="next_lines", primaryjoin=id==Association.prev_id)

Поскольку это указывает «next_lines» назад ссылки нет необходимости иметь «next_lines» отношения.

Вы также можете сделать это с помощью параметра remote_side к отношениям: http://www.sqlalchemy.org/trac/browser/examples/adjacency_list/adjacency_list.py