2011-11-12 1 views
1

私は候補プロパティのキーを格納するためにListPropertyを使用するContestエンティティを持っています。ここではいくつかの詳細は以下のとおりです。私はこのクエリを実行するとGAE:ListPropertyを介してエンティティを取得するときのKindError

class Contest(db.Model): 
    candidates = db.ListProperty(db.Key) 

    def create_candidate_objects(self): 
     put_list = [] 
     for n, name in enumerate(self.tmp_candidates): 
      put_list.append(Candidate(parent = self, name = name)) 
     keys = db.put(put_list) 
     self.candidates = keys 
     self.put() 

class Candidate(db.Model): 
    name = db.StringProperty(required = True) 

は:

c = models.Candidate.all().ancestor(contest).fetch(2) 

すべてが正常に動作します。

しかし、私はこのようなListPropertyを使用してクエリ実行するとき:

c = db.get(contest.candidates) 

を私はエラー

KindError: No implementation for kind 'Candidate' 

を取得し、あなたは最後のクエリが動作しない理由を私は理解するのに役立つことはできますか?私は、クエリを実行しているモジュールに候補クラスをインポートしました。

更新:違いが生じる可能性がある場合は、彼が開発者サーバーにあることに注意してください。

アップデート2:

ニックによって示唆されるように、この作品:

c2 = models.Candidate.get(contest.candidates) 

をしかし、これは動作しません(KindErrorを上げる):

from models import Candidate 
c = db.get(contest.candidates) 

Update3と:

問題テストコードで行が発生するため、本番サーバーでこの特定のエラーを試すことはできません。私はまったく同じ行を別の場所で使っていますが、これは開発サーバーと運用サーバーの両方で動作します。

ニックは輸入について尋ね、と私は私のテストコードでこれをやっている:

sys.path.append("/usr/local/google_appengine/lib/simplejson") 
import simplejson as json 

が、他のすべては、単に典型的なものです。

答えて

-1

はこれを試してみてください:

c = db.get([str(i) for i in contest.candidates]) 
+0

私はすでにそれを試しても動作しません。実際には、これは動作しますが、c = models.Candidate.all()。ancestor(contest).fetch(2)、ちょうど取得したエンティティのキ​​ーを使用して再度取得しようとすることはできません。 't仕事:db.get(c [0] .key())。これがdevサーバのバグかどうか疑問に思っています。 –

+0

なぜこれが助けになると思いますか? –

1

ほとんどの場合、あなたがインポートされていない他のモジュールでCandidateを定義しています。 Candidateはどこに定義されていますか? db.getに電話したときに、そのモジュールをインポートしましたか?呼び出すときにCandidateが有効になるので、Candidate.get(key_list)を呼び出すとうまくいくはずです。

+0

Nick、提案した行はうまくいきますが、候補モデルをインポートした後にdb.getを使用しても、その行は表示されません。私の質問への更新を見てください。 –

+0

@Jeffそれはかなり超現実的です。あなたは 'google.appengine.ext.db._kind_map'の内容を記録できますか?これは、プロダクションとdevサーバの両方で発生しますか?珍しい方法でインポート(リロード、インポートパス)を邪魔していますか? –

+0

私はこの週末までには行けません。私はdevサーバーでこれを試しただけです。 –

関連する問題