Ich arbeite an einem kleinen Projekt, in dem ich Flask-SqlAlchemy verwende, um eine Adjazenzlistenbeziehung zu implementieren. Ich habe ein Modell (Tabelle), das ein Attribut für db.Relationship()
hat, das auf die Spalte parent_id
derselben Tabelle verweist. HierFlask-SqlAlchemy Adjazenzliste Beziehung backfref unerwarteter Fehler
ist der folgende Code (teilweise):
class Node(db.Model):
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(80))
folder_id = db.Column(db.Integer, db.ForeignKey('node.id'))
children = db.relationship('Node', backref = 'parent', remote_side=[id])
Wenn ich versuche, einen untergeordneten Ordner zu einem übergeordneten Ordner mit dem backref Attribute auf dem Kind in dem Python-Shell wie der folgenden Code hinzufügen (Teil):
parentNode = Node('title1')
db.session.add(parent)
db.session.commit()
childNode = Node('title2')
child.parent = parentNode
, jedoch bekomme ich folgende erros nachdem ich versuchen, dass in der Python-Shell:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Incompatible collection type: Node is not list-like
Ich habe die SqlAlchemy Dokumente gelesen, um eine Lösung zu finden, und sie haben ähnliche Syntax für Adjazenzliste Beziehungen. Es hat ein ähnliches Beispiel, zeigt aber nicht, wie man einem Kindknoten einen Elternknoten hinzufügen kann, so wie ich es in der Shell versucht habe. Der Grund für das Hinzufügen des Parent-Knotens zur Backref-Eigenschaft des Child-Objekts ist, dass es mit Eins-zu-Viele-Beziehungen arbeitet. Jede Hilfe beim Finden des Problems mit dem Code würde sehr geschätzt werden ... Bitte zögern Sie nicht, alternative Lösungen vorzuschlagen.
Danke!
Van, vielen Dank für das Snippet die Bereitstellung und das Problem hingewiesen. Ich habe die Beziehung so konfiguriert, wie du es gerade gezeigt hast und rate mal, es funktioniert genau so, wie ich es erwartet habe! Vielen Dank ... Ich schätze die schnelle Hilfe sehr. – shafayet