谷歌数据存储多对一参考

时间:2011-07-12 04:23:33

标签: google-app-engine data-modeling google-cloud-datastore

所以我有两个模型类:

class Dog(db.model):
   dogName = StringProperty()
   dogBreed = StringProperty()

class Cat(db.model):
   catName = StringProperty()
   catBreed = StringProperty()

然后我有第三个模型类来保存所有图片

class Images(db.model):
  imageReference = ReferenceProperty(*Animal*, collection_name = 'allImages')
  imageURL = StringProperty()

动物是狗或猫。显然这不会编译。

现在我的问题是:有没有办法可以将猫图片放入狗图片中?或者我需要创建更多这样的模型:

class DogImages(db.model):
  imageReference = ReferenceProperty(Dog, collection_name = 'allImages')
  imageURL = StringProperty()
class CatImages(db.model):
  imageReference = ReferenceProperty(Cat, collection_name = 'allImages')
  imageURL = StringProperty()

1 个答案:

答案 0 :(得分:3)

您可以使用PolyModel

class Animal(polymodel.PolyModel):
  name = db.StringProperty()
  breed = db.StringProperty()

class Dog(Animal):
  pass

class Cat(Animal):
  pass

现在您可以拥有一个引用动物的ReferenceProperty,并允许使用Dogs或Cats。

但是,您没有任何特定于每种动物类型的属性 - 为什么不只是拥有常规动物模型,添加一个属性来指示它是什么物种,并完全跳过单独的模型?