我怎样才能得到ndb.型号当我唯一的输入是查询?

2024-04-19 13:02:35 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

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

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

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

我想要比那更一般的东西。在


Tags: 对象字符串模型名称modelfooevalbar
2条回答

如果您有类名称,我使用以下代码来查找模型类:

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

KIND Modules dict保存要从以下位置导入模型的模块:

^{pr2}$

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

def query_to_model(query):
  return ndb.Model._kind_map[query.name]

相关问题 更多 >