Как получить все сущности класса модели App Engine, включая сущности его подклассов? - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть вопрос о Google App Engine и запросе к хранилищу данных.

Предположим, у меня есть три класса:

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

class Giraffe(Animal):
   # ...

class Mouse(Animal):
   # ...

Теперь я хочу получить все сущности животных,Я мог бы попробовать

Animal.all()

Но это ничего не возвращает (я создал все сущности Животных, используя конструкторы Жираф и Мышь).

Как получить все сущности Животных?Подходит ли общий подход (подклассы подкласса db.Modell)?

Ответы [ 2 ]

2 голосов
/ 27 ноября 2010

App Engine напрямую не поддерживает наследование классов, но в SDK встроено расширение под названием PolyModel , которое поддерживает. Измените класс Animal так, чтобы он расширял PolyModel вместо Model, и все будет работать так, как вы ожидаете.

0 голосов
/ 26 ноября 2010

В хранилище данных не отслеживаются такие наследования.У каждой сущности есть один «вид».

Если вы хотите, чтобы все животные были одного и того же вида, вы можете иметь свойство, указывающее, к какому виду животных (жираф или мышь) это относится.Таким образом, вы сделаете каждую новую сущность Animal, но затем установите свойство "type" или что-либо еще в Giraffe или Mouse.Таким образом, вы теряете некоторые приятные возможности наследования, а это просто перетаскивание.

...