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 dictは、モデルをインポートするためのモジュールを保持します。

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