0

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

4

1 回答 1

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
于 2013-06-19T17:49:25.910 回答