2

假设有ndb.Model一个看起来像这样:

class Foo(ndb.Model):
  bar = ndb.StringProperty()

我的问题是,如果我唯一的输入是Foo.query()如何将模型作为该查询所属的对象?

def query_to_model(query):
  # some magic 
  return model

Foo.query().kind模型的名称作为字符串返回,但我没有设法找到将其作为对象获取的方法。

以下工作使用eval,但仅当模型在同一文件中定义时:

def query_to_model(query):
  return eval(query.kind)

我想要比这更普遍的东西。

4

2 回答 2

8

使用此模型定义导入代码后,列表ndb.Model._kind_map应包含它。这是魔术:

def query_to_model(query):
  return ndb.Model._kind_map[query.name]
于 2013-02-01T18:42:32.983 回答
2

如果您有种类名称,我将使用此代码查找模型类:

model_module = KIND_MODULES(kind_name)
mod = __import__(model_module, globals(), locals(), [kind_name], -1)
model_class = getattr(mod, kind_name)

KIND Modules 字典包含要从以下位置导入模型的模块:

KIND_MODULES = { 'Users' : 'models', 'Comments' : 'models', 'Cities' : 'examples.models' }
于 2013-02-01T19:08:14.183 回答