如何获取App Engine模型类的所有实体,包括其子类的实体?

时间:2010-11-26 18:22:42

标签: google-app-engine google-cloud-datastore subclass

我对Google App Engine有疑问并查询数据存储区。

假设我有三个班级:

class Animal(db.Model):
   age = db.IntegerProperty()

class Giraffe(Animal):
   # ...

class Mouse(Animal):
   # ...

现在我想获得所有Animal实体。我可以试试

Animal.all()

但是这不会返回任何内容(我使用Giraffe和Mouse构造函数创建了所有Animal实体)。

如何获得所有动物实体?一般方法(db.Modell的子类的子类)是否正确?

2 个答案:

答案 0 :(得分:2)

App Engine并不直接支持类继承,但SDK中内置了一个名为PolyModel的扩展。修改你的Animal类以扩展PolyModel而不是Model,一切都会按照你期望的方式工作。

答案 1 :(得分:0)

数据存储区不跟踪这样的继承。每个实体都有一个“种类”。

如果你想要所有动物都是同一种动物,你可以拥有一个属性来指示它是哪种动物(长颈鹿或老鼠)。因此,您将每个新实体设为Animal,然后将“type”属性或其他设置为Giraffe或Mouse。你以这种方式失去了一些很好的继承功能,这是一种阻力。