【问题标题】:Derive db.Model subclass from db.Key从 db.Key 派生 db.Model 子类
【发布时间】:2013-07-26 00:12:06
【问题描述】:

给定一个 db.Key 实例,如:

db_key = db.Key.from_path('ModelKind', 'UniqueKeyName')

有没有办法像 AppEngine 内部那样返回“ModelKind”的类表示?

类似

db_key.class()

最终结果是我需要在给定键的情况下动态检索类(以构造新实体)。我不提前知道实体类型(“ModelKind”可以是我们的“模式”类(db.Model 子类)表示的任何模型类型)

我想避免的:

import schema_module
cls = getattr(schema_module, 'ModelKind')

因为它将限制“ModelKind”在特定的 schema_module 中定义。

【问题讨论】:

    标签: python google-app-engine


    【解决方案1】:

    您可以通过db_key.kind() 从密钥实例中获取值“ModelKind”。然后,您可以使用db.class_for_kind() 获取相关类本身。所以:

    cls = db.class_for_kind(db_key.kind())
    

    【讨论】:

    • 只是给遇到ndb这个问题的人补充一下,相当于ndb.Model._kind_map[ndb_key.kind()]
    • 进一步说明 - 确保您已导入包含您要查找的类的模块。这对于大型项目来说是一个重要消息。我们构建了一个父模块来导入所有 ndb.Model 子类,方便地命名为import models。希望这对某人有帮助!
    猜你喜欢
    • 1970-01-01
    • 2021-04-01
    • 2015-02-25
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    相关资源
    最近更新 更多