我正在尝试重现此链接上的示例。我编造了一些例子来试图理解它们。对于如何使我的示例起作用的任何指导,我将不胜感激。您可能还记得下面的引言,我认为这就是示例试图描绘的内容。
ReferenceProperty 自动引用和取消引用模型实例作为属性值:模型实例可以直接分配给引用属性,并且将使用其键。
下面更新
在我的问题中,我想对下面复制的文档中的 4 行代码进行说明和示例。
story = db.get(story_key)
author_name = story.author.name
author = db.get(author_key)
stories_by_author = author.story_set.get()
但是该代码与所有回复的人似乎都坚持我应该使用而不是 db 的 ndb 模型无关。由于我不知道如何为 ndb 编写代码,并且无法重现 db 结果,因此我无法想象文档中的工作方式ReferenceProperty
或现在KeyProperty
的工作方式。我相信我已经得到了所有 4 行代码的答案,并将在这里展示。如果有人能证实我对这 4 个例子的回答,我会很高兴。
因此,我下面的 4 个示例现在是为 ndb 编写的,而不是为 db 编写的。
story = ja4.get() #line 1 (Story(key=Key('Story', 5294973121462272), author=Key('Author', 5857923074883584), pov=u'p4'))
story.author.get().name #line 2 (a1)
story.author.get() #line 3 (Author(key=Key('Author',5857923074883584), name=u'a1'))
for astory in Story.query(Story.author == story.author.get().key):
print astory.pov #line 4 (p1, p2, p4)
更新上面
class Author(db.Model):
name = db.StringProperty()
class Story(db.Model):
author = db.KeyProperty(Author) #not Reference
story = db.get(story_key) #I can make this work, but no more.
author_name = story.author.name #Errors are listed below.
author = db.get(author_key)
stories_by_author = author.story_set.get()
下面是我的测试数据和一些试用代码。
class Author(ndb.Model):
name = ndb.StringProperty()
class Story(ndb.Model):
author = ndb.KeyProperty(Author)
pov = ndb.StringProperty()
author1 = Author(name='a1')
author2 = Author(name='a2')
author3 = Author(name='a3')
ka1 = author1.put()
ka2 = author2.put()
ka3 = author3.put()
story1 = Story(pov='p1', author=ka1)
story2 = Story(pov='p2', author=ka2)
story3 = Story(pov='p3', author=ka1)
story4 = Story(pov='p4', author=ka1)
story5 = Story(pov='p5', author=ka2)
story6 = Story(pov='p6', author=ka3)
ja1 = story1.put()
ja2 = story2.put()
ja3 = story3.put()
ja4 = story4.put()
ja5 = story5.put()
ja6 = story6.put()