Google App Engine中的自引用ReferenceProperty
我在使用App Engine(Python)中的ReferenceProperty时遇到了一些麻烦。
为了好玩,我想模拟一个文件夹/文件系统,但在让文件夹引用其他文件夹时遇到了问题。
我第一次尝试是这样的:
class Folder(db.Model):
id = db.StringProperty()
name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)
folder = db.ReferenceProperty(Folder, collection_name="folders")
但是这个尝试失败了,因为在定义“folder”时,“Folder”还没有被定义。
我还尝试在“Folder”的主要声明之外定义“folder”,像这样:
class Folder(db.Model):
id = db.StringProperty()
name = db.StringProperty()
created = db.DateTimeProperty(auto_now_add=True)
Folder.folder = db.ReferenceProperty(Folder, collection_name="folders")
但这个尝试也失败了,出现了以下错误: AttributeError: 'Folder'对象没有属性'folders'
我有点无从下手。有没有人有这方面的经验,或者有什么解决方案呢?
提前谢谢大家。
2 个回答
0
你可以创建一个单独的模型,用来连接这两个东西,可以起个名字叫“FolderChild”(文件夹子项):
class FolderChild(db.Model):
parent = db.ReferenceProperty(Folder)
child = db.ReferenceProperty(Folder, collection_name="children")
9
这正是 SelfReferenceProperty 的用途。