NDB KeyProperty属性是否等同于查询中的祖先键?

时间:2013-06-19 17:31:02

标签: python app-engine-ndb

我认为答案是肯定的,但我想要确认。如果一个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“等效”   值?

1 个答案:

答案 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