谷歌文档中的ReferenceProperty示例对我来说太简洁了

时间:2018-02-04 01:45:00

标签: python google-app-engine referenceproperty

我正在尝试重现示例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()

2 个答案:

答案 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)