我认为答案是肯定的,但我想要确认。如果一个ndb.Model是另一个ndb.Model的“子”(通过一对多关系),我可以删除KeyProperty并简单地在查询中使用祖先密钥吗?例如:
class Parent(ndb.Model):
pass
class Child(ndb.Model):
parent_key = ndb.KeyProperty(Parent)
我可以简单地删除parent_key
,而是使用.filter(ancestor=parent_key)
吗?
[更新]:回答了以下问题,但上一个问题(关于查询)仍然存在。
在更深层次上,祖先键与KeyProperty“等效” 值?
答案 0 :(得分:2)
没有
密钥可以由许多段组成,例如:
ndb.Key('Parent', 'grandma', 'Parent', 'dad', 'Child', 'you')
它存储在对象的key
中,让父对象丢弃最后两个段并给出其余的段。所以对于上述内容:
ndb.Key('Parent', 'grandma', 'Parent', 'dad')
KeyProperty
与此无关,它只是该实体拥有的财产。
所以,如果你要创建:
child = Child(parent=ndb.Key('Parent', 'grandma', 'Parent', 'dad'))
你会发现
>>> child.key
ndb.Key('Parent', 'grandma', 'Parent', 'dad', 'Child', None)
,而
>>> child.parent_key
None