0

给定 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 装饰一个类以更改父对象类型有关,这是一个仍然潜伏在我脑海中的问题。

感谢您的阅读。

4

1 回答 1

0

啊。我发帖后立即回答:

带有 Referer 的文件需要导入 Base

也许其他人会遇到这个怪癖,所以我会留下这个问题。

于 2009-09-26T23:50:23.173 回答