使用 ndb 在另一种类型中多次引用单个 Google 数据存储类型

Referring a single Google datastore kind multiple times in another kind with ndb

我有以下2个ndb模型

from endpoints_proto_datastore.ndb import EndpointsModel

class Foo(EndpointsModel):
    attr1 = ndb.StringProperty(required=True)

class Bar(EndpointsModel):
    attr1 = ndb.KeyProperty('Foo', required=True)
    attr2 = ndb.KeyProperty('Foo', required=True)

如您所见,Bar 有几个对 Foo 的引用。

现在,当我为每个引用赋值时,第二个会替换第一个,并且只有它会存储到数据库中,最有趣的部分是,当使用 dev_appserver 数据存储查看器查找时, 属性 在名字 'Foo' 下,而不是在第二个 属性 的名字下,它取代了第一个。

插入后这是我所期望的

Bar(key=Key('Bar', xxxxxxxxxxxxxxxx), attr1=Key('Foo', xxxxxxxxxxxxxxxx), attr2=Key('Foo', xxxxxxxxxxxxxxxx)

但我只得到

Bar(key=Key('Bar', xxxxxxxxxxxxxxxxxx), attr2=Key('Foo', xxxxxxxxxxxxxxxx))

并且在数据存储查看器中,

Entity Kind Bar

Entity Key  xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ID          xxxxxxxxxxxxxxxx


Foo (Key)   xxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Foo: id=xxxxxxxxxxxxxxxx

KeyProperty 的第一个参数是 属性 的名称(如果您希望名称与 class-属性 不同),因此使用相同的名称两次将产生您所看到的行为。

您应该使用命名参数来指定类型:

ndb.KeyProperty(kind='Foo', required=True)