我正在尝试重现示例at this link。我编写了几个例子来试图理解它们。我很感激有关如何使我的示例工作的任何指导。您可能会回想下面的引用,我认为这些示例是试图描绘的内容。
ReferenceProperty自动引用和解引用模型 实例作为属性值:可以将模型实例分配给a 直接引用属性,将使用其密钥。
以下更新
在我的问题中,我想要澄清下面复制的文档中的4行代码的说明和示例。
story = db.get(story_key)
author_name = story.author.name
author = db.get(author_key)
stories_by_author = author.story_set.get()
但是该代码与ndb模型无关,所有回复的人似乎都坚持认为我应该使用而不是db。由于我不知道如何为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()
答案 0 :(得分:3)
这是一个非答案的答案:
帮自己一个忙,并使用较新的ndb
而不是db
。那里的语法是:
from google.appengine.ext import ndb
class Author(ndb.Model):
name = ndb.StringProperty()
class Story(ndb.Model):
author = ndb.KeyProperty(kind = Author)
pov = ndb.StringProperty()
答案 1 :(得分:0)
使用问题中的ndb模型和数据,接下来的4"行"回答我的问题。
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)