2016-10-28 7 views
0

MongoAlchemyを使用すると、DocumentFieldを2つのタイプの1つにすることは可能ですか?例えば:MongoAlchemy:異なる2つのDocumentFieldのうちの1つ

class A(Document): 
    foo = StringField() 

class B(Document): 
    bar = StringField() 

class C(Document): 
    child = DocumentField(A or B) 

私が働くかもしれないいくつかのオプションを考えた:

  • が共通の親ABを与え、その後、child = DocumentField(CommonParent)を行います。
  • は、DocumentFieldを上書きしますが、タイプのリストではなく1つのタイプを検索するようにバリデーターを変更します。
  • AnythingFieldを使用してください。キンダはその点を打ち負かす。

しかし、すでに完了しているのだろうか?

https://github.com/jeffjenkins/MongoAlchemy/tree/poly-queries

あなたはだバグ修正のビットを行うために喜んでいる場合:私は、ポリモーフィック型を実装するところ(私はしばらくの間、それを使用しましたが)

答えて

0

は私がマージされたことがない支店がありましたかなり良いオプションです。

それ以外の場合は、カスタムフィールドを実装するのが最も簡単です。私は入力としてDocumentFieldのリストを取った通常のフィールドを作成する方が簡単かもしれないと思っています。これはDocumentField(多態性ブランチの仕組みですがより複雑です)と混乱することとは区別できます。

+0

ありがとうございました。カスタムフィールドは私が取り組んでいるルートです。 https://gist.github.com/jmgirven/59a363f9aa8392abca80fbe6956c174b。私はラップ/アンラップが機能していると思いますが、DocumentFieldコードから、私は他のものの中で 'dirty_ops'と' subfields'を実装する必要があると思います。すべてのポインタ? –

+0

今日、このことについて通知されたばかりです。申し訳ありません。だから、私が正しく覚えていれば、不正な操作はサブ文書では機能しません。しかし、変更されたフィールドだけを更新しようとしていない限り、それは大丈夫です(私はお勧めしません) –

関連する問題