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

标签 python google-app-engine google-cloud-datastore endpoints-proto-datastore

我有以下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 的第一个参数是属性的名称(如果您希望名称不同于类属性),因此两次使用相同的名称将产生您所看到的行为。

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

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

关于python - 使用 ndb 在另一种类型中多次引用单个 Google 数据存储类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42487556/

相关文章:

python - 为什么全局变量 fsize 会被清除?

python - Python/OpenCV —在两个图像中匹配细菌的质心点

python - Tweepy。让流永远运行

java - 如何对 String 对象运行 K-means 算法?

java - 一组给定的扇出任务完成后,如何在 GAE 上执行单个聚合任务

python - 在 Google App Engine 上使用 flask-login

python - 将值添加到行并将其复制到 pandas 中该值的正下方

java - 带有字符串通配符的 setFilter()?

java - gae 1.7.3 更新 -> java.io.InvalidClassException

go - 如何不在数据存储区中存储__key__