3

我有以下 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
4

1 回答 1

3

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

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

ndb.KeyProperty(kind='Foo', required=True)
于 2017-02-27T18:12:46.903 回答