ndb.PolyModel 作为常规实体的祖先 - 坏主意?

ndb.PolyModel as an ancestor of a regular entity -- bad idea?

我想使一个 ndb.PolyModel 子实体成为另一个 ndb.Model 实体的祖先,因为我需要子实体对于查询是高度一致的。

这件事让我很紧张。这是个坏主意吗?

据我所知,ndb.PolyModel 背后的秘诀是它的实例有一个特殊的 属性,称为 'class'。

这是继承链中所有 class 名称的重复 属性 字符串,ndb 然后在将其拉出时使用它来实例化适当的子 class数据存储。

每个实例的键仍然是父实例的键 class。

所以对于下面的例子:

class Animal(ndb.PolyModel):

class Cat(Animal):

class Dog(Animal):

如果你这样做

d = Dog(...)
d.put()

d.key 仍然是 ndb.Key('Animal', 123456789)

在您的数据存储区查看器中,您将只有 Animal table 而不是 Dog table 或 Cat table .

所以我想你应该安全地使用 ndb.Key('Animal', 123456789) 作为其他模型的祖先。