我有以下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的引用。
现在,当我为每个引用分配值时,第二个替换第一个,只有它存储到db,最有趣的部分是当使用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
答案 0 :(得分:3)
KeyProperty的第一个参数是属性的名称(如果您希望名称与class-property不同),因此使用相同的名称两次将产生您所看到的行为。
您应该使用命名参数来指定类型:
ndb.KeyProperty(kind='Foo', required=True)