2010-11-14 36 views
9

J'essaie de créer une relation plusieurs-à-plusieurs auto-référentielle (cela signifie que Line peut avoir plusieurs lignes parent et plusieurs lignes enfants) dans sqlalchemy comme ceci:Relation autoréférentielle plusieurs-à-plusieurs dans sqlalchemy

Mais je reçois l'erreur suivante: sqlalchemy.exc.ArgumentError: Impossible de déterminer condition de jointure entre les tables enfant parent/ sur Line.next_lines relation. Spécifiez un 'primaryjoin' expressio n. Si "secondaire" est présent, "secondaryjoin" est également nécessaire. Savez-vous comment je pourrais remédier à cela?

+0

J'ai essayé ceci: next_lines = relation (association, backref = "prev_lines", primaryjoin = id == Association.next_id) = prev_lines relation (Association, backref = "next_lines", primaryjoin = id == Association.prev_id) Maintenant, il ne produit aucune erreur. Est-ce une bonne solution? Ou va-t-il produire d'autres problèmes? – mike

Répondre

5

Vous devriez juste besoin:

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

Depuis cette spécifie la relation « next_lines » renvoi il n'y a pas besoin d'avoir un « de next_lines ».

Vous pouvez aussi le faire en utilisant le paramètre remote_side à une relation: http://www.sqlalchemy.org/trac/browser/examples/adjacency_list/adjacency_list.py