2013-02-26 10 views
6

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!

Odpowiedz

5

Skonfiguruj relację w niewłaściwy sposób. Proszę to zrobić jeden:

from sqlalchemy.orm import backref 
class Node(db.Model): 
    # ... 
    children = db.relationship('Node', backref=backref('parent', remote_side=[id])) 

lub

class Node(db.Model): 
    # ... 
    parent = db.relationship("Node", backref='children', remote_side=[id]) 
+0

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

Powiązane problemy