我需要能够在appengine数据库中创建一个类似树的结构 我试图自己创建一个对象引用,但还没有让它工作。
class Item(db.Model):
children = db.ListProperty(db.ReferenceProperty(Item))
答案 0 :(得分:3)
或者,您可以使用以下内容存储对父级中子项的引用:
class Node(db.Model):
children = db.ListProperty(db.Key)
这个答案无耻地被窃取(有信用!)来自Nick Johnson对this related question
的回答答案 1 :(得分:1)
Here是来自google-appengine群组的相关主题。
您可以在每个子节点中存储对父节点的引用,而不是对父节点中子节点的引用。
以下是一些代码:
class Node(db.Model):
pass
...snip...
root = Node()
db.put(root)
for i in xrange(10):
child = Node(parent=root)
db.put(child)
for i in xrange(5):
grandchild = Node(parent=child)
db.put(grandchild)
parent
是Model
上的一个特殊字段,它告诉数据存储区实体与其父节点具有父子关系。
来自docs:
当应用程序创建时 实体,它可以分配另一个实体 作为新实体的父级,使用 模型中的父参数 构造函数。将父母分配给 新实体将新实体放入 与父母相同的实体组 实体。
没有父级的实体是根实体。作为另一实体的父实体的实体也可以具有父实体。从实体到根的父实体链是实体的路径,路径的成员是实体的祖先。实体的父级是在创建实体时定义的,以后不能更改。