Google App Engine中的自引用ReferenceProperty

2 投票
2 回答
735 浏览
提问于 2025-04-15 21:11

我在使用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 的用途。

撰写回答