0

Google App Engineでポリモデルを指定すると、次のようになります。

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'

トレースバックは次のようなものです。

>>> 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

ああ。私は投稿した直後にこれに答えました:

リファラーを含むファイルはBaseをインポートする必要があります。

おそらく他の誰かがこの癖に遭遇するので、私はこの質問を開いたままにしておきます。

于 2009-09-26T23:50:23.173 に答える