0

我正在尝试重现此链接上的示例。我编造了一些例子来试图理解它们。对于如何使我的示例起作用的任何指导,我将不胜感激。您可能还记得下面的引言,我认为这就是示例试图描绘的内容。

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()
4

2 回答 2

3

Here is a non-answer answer:

Do yourself a favor and use the newer ndb over db. There, the syntax would be:

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()
于 2018-02-04T02:25:25.430 回答
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)
于 2018-02-09T17:00:29.547 回答