我有一个Contest实体,它使用ListProperty存储候选实体的键。以下是一些细节:
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'
你能帮我理解为什么最后一个查询不起作用吗?我已将Candidate类导入到正在执行查询的模块中。
更新:请注意,他可能会在开发服务器上,以防可能产生影响。
UPDATE2:
根据尼克的建议,这有效:
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
但其他一切都很典型。
答案 0 :(得分:1)
您很可能在另一个尚未导入的模块中定义Candidate
。 Candidate
在哪里定义?当您致电db.get
时,您是否导入了模块?调用Candidate.get(key_list)
应该有效,因为它会在您调用时强制您拥有有效的Candidate
。
答案 1 :(得分:-1)
试试这个:
c = db.get([str(i) for i in contest.candidates])