簡體   English   中英

ndb中的多對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM