给定 Google App Engine 中的 Polymodel,如下所示:
from google.appengine.ext import db
from google.appengine.ext.db import polymodel
class Base(polymodel.PolyModel):
def add_to_referer(self):
Referer(target=self).put()
class Referer(db.Model):
target = db.ReferenceProperty()
@classmethod
def who_referred(cls):
for referer in Referer.all():
obj = referer.target
最后一行给出了一个错误,如下所示:
No implementation for kind 'Base'
Traceback 是这样的:
>>> object = referer.target
/usr/local/google_appengine/google/appengine/ext/db/__init__.py in __get__:2804
/usr/local/google_appengine/google/appengine/ext/db/__init__.py in get:1179
/usr/local/google_appengine/google/appengine/ext/db/__init__.py in class_for_kind:220
有谁知道这里发生了什么?显然,预期的行为是不会引发错误。
Base 和 Referer 位于单独的文件中(而不是导入)可能是相关的。
这个问题可能与Python 装饰一个类以更改父对象类型有关,这是一个仍然潜伏在我脑海中的问题。
感谢您的阅读。