0

共通モデル (ModelC) のエンティティを参照する KeyProperty を含むさまざまなモデル (ModelA、ModelB) がいくつかあります。ModelA と ModelB の複数のインスタンスによって参照されるエンティティを使用して何らかの処理を行う必要があるメソッドがありますが、各モデルの KeyProperty は異なる名前が付けられており、ModelA と ModelB で根本的に異なる役割を果たしているはずです。ModelC を参照する KeyProperty を使用して必要な処理は、ModelA と ModelB のエンティティの同一のリストであるため、両方で呼び出すことができる共通のメソッドを定義できるはずですが、どのプロパティを使用するかをこのメソッドにどのように伝えるのでしょうか?

モデルのプロパティ属性を使用して、エンティティからそのプロパティの値を取得できますか?

NDB の App Engine ドキュメントを広範囲に調べましたが、これを行う方法がわかりません。それは非常に些細なことであるか、ドキュメントで何かを見逃していましたが、これを解決することはできません.

以下に簡単な例を示します。

モデル:

class ModelA(ndb.Model):
    name = ndb.StringProperty()
    last_model_c = ndb.KeyProperty(kind='ModelC')
    ...

class ModelB(ndb.Model):
    sku = ndb.StringProperty()
    first_use_model_c = ndb.KeyProperty(kind='ModelC')
    ...

class ModelC(ndb.Model):
    ...

処理への呼び出し:

...
    q = ModelA.query()
    ...
    self.model_c_scan(q.fetch(), ModelA.last_model_c)

...

    q = ModelB.query()
    ...
    self.model_c_scan(q.fetch(), ModelB.first_use_model_c)

処理:

...
    def model_c_scan(entity_list, property)
        ...
        for entity in entity_list:
            model_c_key = <get the entity's value for the property>
            model_c = model_c_key.get()
            ...
4

1 に答える 1

0

私が見つけた解決策は、文字列を使用してプロパティの名前を指定し、単に python のgetattr().

getattr()ndb モデルとも互換性のある純粋な python メソッドは、以下のように機能します。

getattr(ModelName,'propertyName')
于 2012-11-21T23:20:43.187 に答える