【发布时间】:2014-08-15 01:09:45
【问题描述】:
尝试用 ndb 建模多对多关系。谁能指出一个很好的例子来说明如何做到这一点?
这里是我目前拥有的一个例子:
class Person(ndb.Model):
guilds = ndb.KeyProperty(kind="Guild", repeated=True)
class Guild(ndb.Model)
members = ndb.KeyProperty(kind="Person", repeated=True)
def add_person(self, person):
self.members.append(person.key)
self.put()
person.guilds.append(self.key)
person.put()
这是正确的方法吗?我环顾四周,但似乎找不到关于该主题的任何好的文档。
在数据存储查看器中,我可以看到这种关系被存储为我所期望的键列表。
但是,当我尝试在 Person 类方法中使用它们时:
for guild in self.guilds:
我明白了:
TypeError: 'KeyProperty' object is not iterable
【问题讨论】:
-
for guild in self.guilds应该可以工作。再次检查您是否将repeated=True放入:guilds = ndb.KeyProperty(kind="Guild", repeated=True) -
请注意,使用重复属性可以实现的关系数量有一个上限。如果您需要数千或更多、多对多的关系,或者您需要为关系命名,那么一个包含两个关键属性的中间实体也可以工作,每个关键属性都指向关系的每一端,但它通常效率较低,您可能有如果您需要摘要视图以避免额外的查找,请在此实体中存储一些冗余信息。
标签: python google-app-engine many-to-many app-engine-ndb