使用 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)
我有以下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)