[英]Many-To-Many Relationship in ndb
嘗試使用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
不,這不是正確的方法。
您可以只使用一個重復屬性來建模多對多關系:
class Person(ndb.Model):
guilds = ndb.KeyProperty(kind="Guild", repeated=True)
class Guild(ndb.Model):
@property
def members(self):
return Person.query().filter(Person.guilds == self.key)
def add_person(self, person):
person.guilds.append(self.key)
person.put()
或者反之:
class Person(ndb.Model):
@property
def guilds(self):
return Guild.query().filter(Guild.members == self.key)
class Guild(ndb.Model):
members = ndb.KeyProperty(kind="Person", repeated=True)
def add_person(self, person):
self.members.append(person.key)
self.put()
關系的方向取決於許多因素(您的商業模式,每個人的行會數量,每個行會的成員數量等)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.