1

この方法で ReferencePropery を介してエンティティを取得したいと考えています。

getattr(model, refrence)

ここで、モデルは でdb.Model、リファレンスはdb.ReferencePropertyです。しかし、次のソートのインポートを追加することで回避できる KindError が発生します。

from foomodule import ReferedKind

ReferedKind上記で取得したいエンティティのクラスはどこにありますかgetattr

しかし、私の問題は、これを呼び出したい関数の性質のため、私の場合、私のmodelモデルクラスに属することができます。なので、どうなるかわかりませんReferedKind

getattr可能なすべてのモデル クラスをインポートせずに、参照されたエンティティを呼び出して取得するにはどうすればよいですか?

ReferanceProperty動的にインポートできるように、によって参照されるエンティティのクラスを事前に知る方法はありますか?

追加情報

JSONのシリアライズ可能なpython dictを返す関数を書いています。場合によっては、db.to_dict() によって返される辞書が json シリアル化できないためです。そのため、関数は、辞書に入れる必要があるモデルの種類を事前に知りません。

4

1 に答える 1

1

通常、何かを実行する前に、取得できる可能性のあるすべてのモデルをインポートする必要があります。

あなたは自分自身のために物事を難しくしています。

これを行う唯一の方法は、db.Model または ndb.Model よりも低いレベルで作業して生データを取得し、それを調べることです。その場合でも、参照プロパティを逆参照するか、キーを取得する前にモデルをインポートする必要があります。

この ndm には参照プロパティがなく、KeyProperty があるため、これを行うことにした場合は、getattr を使用して、キーがあるかどうかを確認し、キーと呼ばれるオブジェクトを取得できます。

dbに固執したい場合。あなたが使用する必要があるので、それは面倒ですget_value_for_datastore

これには、

エンティティのクラスを取得し、クラスのプロパティを取得してから get_value_for_datastore を呼び出してインスタンスを渡し、インポートしたと仮定してキーを取得できます。

したがって、foo というデータストアのインスタンスがある場合は、

prop = getattr(foo.__class__,"the_property_name")
obj_key = prop.get_value_for_datastore(foo)

次に、キーから種類を取得し、キーを get() する前に、その種類のモデルをインポートする方法を検討する必要があります。KindError

すべての努力がそれだけの価値があるかどうかはわかりません。モデルをインポートするだけの方が簡単です。最終的には、使用する前にモデルをインポートする必要があります。得られる唯一のものは、起動時間を節約する可能性のある遅延インポートです。

于 2013-07-01T10:11:28.300 に答える