当我像这样运行 Google App Engine 时:
from google.appengine.ext import db
from google.appengine.ext.db import polymodel
class Father(polymodel.PolyModel):
def hello(self):
print "Father says hi"
class Son(Father):
def hello(self):
print "Spawn says hi"
当我跑步时,例如
s = Son()
s.put()
son_from_father = Father.get_by_id(s.key().id())
son_from_father.hello()
这将打印“父亲打招呼”。我希望这会打印出“儿子打招呼”。有谁知道如何做到这一点,在这里?
编辑:
最终,问题是我将 Spawn 对象保存为父亲对象。即使父对象(在我的应用程序中)具有较少的属性,GAE 也很乐意这样做。GAE 没有抱怨,因为我(默默地)从正在保存的数据中删除了任何不在 Model.properties() 中的值。
我已经修复了不正确的类型保存并添加了对未保存的额外值的检查(这有助于检查应该发生的 TODO 注释)。保存时我对数据所做的检查基本上是:
def save_obj(obj, data, Model):
for prop in Model.properties(): # checks/other things happen in this loop
setattr(obj, prop, data.get(prop))
extra_data = set(data).difference(Model.properties())
if extra_data:
logging.debug("Extra data!")
这里的帖子很有帮助-谢谢。GAE 按预期工作,现在我按照指示使用它。:)