Google app engine 如何获取应用引擎模型类的所有实体,包括其子类的实体?

Google app engine 如何获取应用引擎模型类的所有实体,包括其子类的实体?,google-app-engine,google-cloud-datastore,subclass,Google App Engine,Google Cloud Datastore,Subclass,我有一个关于谷歌应用程序引擎和查询数据存储的问题 假设我有三门课: class Animal(db.Model): age = db.IntegerProperty() class Giraffe(Animal): # ... class Mouse(Animal): # ... 现在我想得到所有的动物实体。我可以试试 Animal.all() 但这不会返回任何结果(我使用长颈鹿和鼠标构造函数创建了所有动物实体) 我如何获得所有的动物实体?常规方法(db.Modell子

我有一个关于谷歌应用程序引擎和查询数据存储的问题

假设我有三门课:

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

class Giraffe(Animal):
   # ...

class Mouse(Animal):
   # ...
现在我想得到所有的动物实体。我可以试试

Animal.all()
但这不会返回任何结果(我使用长颈鹿和鼠标构造函数创建了所有动物实体)


我如何获得所有的动物实体?常规方法(db.Modell子类的子类)行吗?

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


如果您希望所有动物都属于同一种类,则可以使用一个属性来指示它是哪种动物(长颈鹿或老鼠)。因此,您可以将每个新实体设置为
动物
,然后将“type”属性或其他属性设置为长颈鹿或鼠标。这种方式会丢失继承的一些优秀功能,这是一种拖累。

应用程序引擎不直接支持类继承,但SDK中内置了一个扩展,名为它。修改您的Animal类以扩展PolyModel而不是Model,一切都将按您所期望的方式运行。

Aw,谢谢。问题是我需要用不同于鼠标的方式与长颈鹿互动,它们有不同的属性。你知道推荐的方法吗?我可以考虑a)将数据存储为字符串属性(例如Animal.specialInfo=“Species:Mouse,Favorite\u brand\u of_cheese:xyz”)或b)使用引用单个子类的列表(我可能创建一个AnimalCollection)。您可以保留当前设置,只需更改查询-而不是Animal.all(),调用Giraffe.all()和Mouse.all()并将这些结果合并到泛型
Animal
s的列表中。问题是,我需要为我拥有的每个新类调整列表生成代码。但如果我找不到更好的解决办法,我想我会这么做的。