GAE(Python):如何从StructuredProperty获取密钥?
我有以下课程:GAE(Python):如何从StructuredProperty获取密钥?,python,google-app-engine,Python,Google App Engine,我有以下课程: class X(ndb.Model): field1 = ndb.StringProperty(indexed=True) class Y(ndb.Model): ref = ndb.StructuredProperty(X) field2 = ndb.StringProperty(indexed=False) class Z(ndb.Model): refs = ndb.StructuredProperty(Y, repeated=True) 如果我有一个
class X(ndb.Model):
field1 = ndb.StringProperty(indexed=True)
class Y(ndb.Model):
ref = ndb.StructuredProperty(X)
field2 = ndb.StringProperty(indexed=False)
class Z(ndb.Model):
refs = ndb.StructuredProperty(Y, repeated=True)
如果我有一个名为Z
的Z
类型的对象,那么我可以通过调用Z.key
来获取该对象的密钥。假设我在z
字段引用中添加了一些对象,那么如何遍历这些对象以获取X
和Y
类型的对象的键
我尝试了z.refs[0].key
和z.refs[0].ref.key
,但它们都没有返回。我可以参考z.refs[0].field2
和z.refs[0].ref.field1
很好
我尝试将StructuredProperty切换到LocalStructuredProperty,但没有任何改变。Per
尽管(结构化模型)实例是使用与模型类相同的语法定义的,但它们不是成熟的实体。他们在数据存储中没有自己的密钥。它们无法独立于。。。它们所属的实体
它这样工作的原因是,当您使用结构化属性创建实体时,结构化属性将扩展为包含它的实体上的新属性。将Z实体保存到数据存储后,请查看数据存储查看器,您将看到该实体的类似内容:
Entity Key: ahxkZXZ-ZG9tYWluLW1hcmtldHBsYWNlLWRlYnVncg4LEgFaGICAgICAgOAJDA
ID: 5488762045857792
refs.field2 (list): [u'y1', u'y2']
refs.ref.field1 (list): [u'x1', u'x2']
另外,您会注意到,如果更改保存到数据存储中的X/Y实体的其中一个field1/field2值,则存储在Z实体中的相应refs.ref.field1/refs.field2值将不会更新,由于Z中的值没有以任何方式链接回原始X/Y实体。如果我希望能够获取关键帧并查看field1/field2中的更改,我最好的选择是使用KeyProperty,然后手动查询SubjectObjects中的field2、子对象和field1吗?