我对Google App Engine有疑问并查询数据存储区。
假设我有三个班级:
class Animal(db.Model):
age = db.IntegerProperty()
class Giraffe(Animal):
# ...
class Mouse(Animal):
# ...
现在我想获得所有Animal实体。我可以试试
Animal.all()
但是这不会返回任何内容(我使用Giraffe和Mouse构造函数创建了所有Animal实体)。
如何获得所有动物实体?一般方法(db.Modell的子类的子类)是否正确?
答案 0 :(得分:2)
App Engine并不直接支持类继承,但SDK中内置了一个名为PolyModel的扩展。修改你的Animal类以扩展PolyModel而不是Model,一切都会按照你期望的方式工作。
答案 1 :(得分:0)
数据存储区不跟踪这样的继承。每个实体都有一个“种类”。
如果你想要所有动物都是同一种动物,你可以拥有一个属性来指示它是哪种动物(长颈鹿或老鼠)。因此,您将每个新实体设为Animal
,然后将“type”属性或其他设置为Giraffe或Mouse。你以这种方式失去了一些很好的继承功能,这是一种阻力。