Google App Engine: KindError - Няма внедряване за тип „ObjectName“

Пиша db.Model клас в google app engine, който изглежда нещо подобно:

class Cheese(db.Model):
   name = db.StringProperty()
   def say_cheese(self):
      return name + "cheese"

По някаква причина винаги, когато стартирам:

cheese = Cheese(name = "smelly")
print thing.say_cheese()

Получавам KindError - Няма реализация за вида "Cheese". Искам да пише: "миризливо сирене"

Правя ли нещо нередно? Нямам ли право да добавя метод към обект db.Model?


person Petwoip    schedule 12.07.2010    source източник
comment
Кодът, който публикувахте, има няколко проблема: 1) say_cheese се опитва да получи достъп до name, където мисля, че имате предвид self.name. 2) thing се използва без да е дефинирано.   -  person David Underhill    schedule 13.07.2010


Отговори (1)


Звучи сякаш thing всъщност се зарежда от поле db.ReferenceProperty() (на не-Cheese обект), което случайно препраща към Cheese обект. Ако получите достъп до такова свойство, без първо да импортирате модела Cheese, тогава кодът няма да може да намери вида Cheese за конструиране на обекта и ще се провали с грешката, която сте посочили.

Както и да е, опитайте да импортирате модела Cheese в кода, който причинява грешката. След това кодът трябва да може да намери изпълнението за Cheese, когато има нужда от него.

За да отговоря на другата част от вашия въпрос: Да, със сигурност ви е позволено да добавяте свои собствени методи към подклас db.Model.

person David Underhill    schedule 12.07.2010
comment
Страхотно, работи. Имах и друг странен проблем, при който два модула се импортираха взаимно, но и това го поправих. - person Petwoip; 14.07.2010