Pracuję nad małym projektem, w którym używam Flask-SqlAlchemy do implementacji relacji listy przyległości. Mam model (tabela), który ma atrybut db.Relationship()
, który odwołuje się do kolumny parent_id
tej samej tabeli.Flask-SqlAlchemy Lista sąsiedztwa Relacja backfref nieoczekiwany błąd
Oto następujący kod (częściowe):
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])
Gdy próbuję dodać folder dziecko do folderu nadrzędnego za pomocą atrybutu backref na dziecko w Python Shell takich jak poniższy kod (częściowe):
parentNode = Node('title1')
db.session.add(parent)
db.session.commit()
childNode = Node('title2')
child.parent = parentNode
jednak uzyskać następujące erros po staram że w powłoce Python:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Incompatible collection type: Node is not list-like
Przeczytałem dokumentację SqlAlchemy, aby znaleźć rozwiązanie i mają one podobną składnię dla relacji na listach przyległych. Ma podobny przykład, ale nie pokazuje, w jaki sposób można dodać węzeł nadrzędny do węzła potomnego, tak jak próbowałem w powłoce. Powodem dodania węzła nadrzędnego do właściwości backref potomka jest to, że działa z relacjami jeden-do-wielu. Każda pomoc w znalezieniu problemu z kodem byłaby bardzo doceniana ... Prosimy sugerować alternatywne rozwiązania.
Dzięki!
Van, dzięki za zapewnienie fragment i zwracając uwagę na problem. Właśnie skonfigurowałem relację w taki sposób, jaki właśnie pokazałeś i zgadnij co, działa dokładnie tak, jak tego oczekiwałem! Wielkie dzięki ... Naprawdę doceniam szybką pomoc. – shafayet