2016-12-02 14 views
2

mongoengineでは、Documentが別のDocumentクラスから継承する場合、そのサブクラスのインスタンスとして識別する_cls属性が適用されます。同じスーパークラスを継承するすべてのオブジェクトは、同じコレクションに格納されます。Superclassから継承するクラスにmongoengine

Supe(Document): 
    pass 

Sub(Supe): 
    pass 

また、サブのインスタンスは_cls="Supe.Sub"です。 mongoengineの規約であるため、コレクションからオブジェクトを取得してJSONとして返すときに_clsは渡されません。もちろん、私はいつもクエリと一致するオブジェクトが欲しいですが、時々私は少し異なる方法で異なるサブクラスを表示したいのですが、サブクラス固有の属性を持っているかどうかを知ることに頼っています。

このようなサブクラスを標識する適切な次のようになります。

Sub(Supe): 
    kind = StringField(default='sub') 
    ... 

それは私が相続のポイントまたはmongoengineはそれをしない、少なくとも道を欠けているように私は感じさせます。

答えて

0

キーはあなたができる、データベースから取得することができ_cls勿論

「それはmongoengine大会であるため、_clsが オブジェクトがコレクションから引き出され、JSONとして返されたときに渡されていません」これを使用してオブジェクトを分類します。

それは、このようなサブクラスを標識する適切な次のようになります。

Sub(Supe): 
    kind = StringField(default='sub') 

はい、なぜか?余分な情報が必要な場合は、アプリロジックに合わせて保存しても問題ありません。しかし、あなたは_cls属性にアクセスできるので、これは必要ないと思います。

関連する問題