6

私は、隣接リストの関係を実装するためにFlask-SqlAlchemyを使用している小さなプロジェクトに取り組んでいます。同じテーブルの列db.Relationship()を参照する属性を持つモデル(テーブル)があります。parent_id

次のコード(部分的)は次のとおりです。

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])

次のコード(部分的)など、Pythonシェルの子のbackref属性を使用して、子フォルダーを親フォルダーに追加しようとすると、次のようになります。

parentNode = Node('title1')
db.session.add(parent)
db.session.commit()

childNode = Node('title2')
child.parent = parentNode

ただし、Pythonシェルで試してみると、次のエラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

TypeError: Incompatible collection type: Node is not list-like

SqlAlchemyのドキュメントを読んで解決策を見つけましたが、隣接リストの関係について同様の構文があります。同様の例がありますが、シェルで試したように親ノードを子ノードに追加する方法は示されていません。親ノードを子のbackrefプロパティに追加する理由は、親ノードが1対多の関係で機能するためです。コードの問題を見つけるのに助けがあれば大歓迎です...別の解決策を提案してください。

ありがとう!

4

1 に答える 1

7

関係を間違った方法で構成しました。これをしてください:

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

また

class Node(db.Model):
    # ...
    parent = db.relationship("Node", backref='children', remote_side=[id])
于 2013-02-26T08:55:11.253 に答える