4

他のモデルが継承する基本モデルクラスで定義した、共通のプロパティセットを共有するモデルがいくつかあります。

class BaseUser(ndb.Model):
    name = ndb.StringProperty()

class DerivedUserA(BaseUser):
    # some additional properties...

class DerivedUserB(BaseUser):
    # some additional properties...

BaseUser他のモデルでは、派生モデルへの参照が必要です。

class MainModel(ndb.Model):
    user = ndb.KeyProperty(kind = BaseUser)

DerivedUserAただし、プロパティにエンティティキーを設定しようとするとMainModel.user、GAEは、BadValueError種類のあるキーを期待しているBaseUserが、が与えられていることを示しDerivedUserAます。

kindから引数を削除するとMainModel、次のように機能します。

class MainModel(ndb.Model):
    user = ndb.KeyProperty()

私はそれと一緒に暮らすことができましたが、私はむしろ私がMainModel.userプロパティ内のいかなる種類のエンティティも保存しようとしていないことを確認するために適切な場所にチェックを入れたいと思います。それを行う方法はありますか?

4

2 に答える 2

3

データストアの継承にPolyModelを使用する-> https://developers.google.com/appengine/docs/python/ndb/polymodelclass

于 2012-08-15T19:55:39.057 に答える
3

これが機能しない理由は、のkindパラメータKeyProperty()がすぐに文字列に変換されるためです。
これは検証機能にすぎないため、これを修正することを検討できます。
このアイデアが気に入った場合は、トラッカーに機能リクエストを提出できます:http : //code.google.com/p/appengine-ndb-experiment/issues/list-これはPolyModelよりも軽量です(とにかくPolyModelはあなたが探しているものかもしれません)。

于 2012-08-15T20:33:43.870 に答える