我想将一个ndb.PolyModel子实体作为另一个ndb.Model实体的祖先,因为我需要该子实体对于查询具有强烈的一致性。
这件事让我感到紧张。这是个坏主意吗?
答案 0 :(得分:1)
据我了解,ndb.PolyModel背后的秘密之处在于它的实例具有一个名为“ class”的特殊属性。
这是继承链中所有类名的字符串的重复属性,当ndb将其从数据存储中拉出时,ndb然后使用该实例化相应的子类。
每个实例的键仍然是父类的键。
对于以下示例:
class Animal(ndb.PolyModel):
class Cat(Animal):
class Dog(Animal):
如果愿意
d = Dog(...)
d.put()
d.key
仍然类似于ndb.Key('Animal', 123456789)
在数据存储查看器中,您只会有一个Animal
表,而没有Dog
表或Cat
表。
因此,我想您可以安全地使用ndb.Key('Animal', 123456789)
作为其他模型的祖先。