2016-09-05 9 views
1

値として:私はReferenceFieldにゲームを変換する必要がMongoengine:EmbededDocumentsと動的なフィールドとして、私が今までMapFieldを使用している

class Game(EmbeddedDocument): 
    iscomplete = BooleanField() 
    score = IntField() 
    #other not dynamic fields 


class Progress(Document): 
    user = ReferenceField(User, dbref=True) 
    games = MapField(EmbeddedDocumentField(Game)) 
    created_at = DateTimeField() 
    updated_on = DateTimeField() 

私は私のような文書持つことができるように、値のような動的フィールド/キーが、embeddedDocumentで文書を作成したい:

{ 
    "game1": { 
     "iscomplete": true, 
     "score": 23, 
     }, 
    "game2": { 
     "iscomplete": false, 
     "score": 10, 
     } 
} 

は、とにかく、私はそれを達成することができ、ここでトンですか?

答えて

1

あなたはdynamic document in mongengineを使用することachiveことができます。

DynamicDocument文書は文書と同じように動作しますが、それらに設定された任意の データ/属性もそう

を保存され、削除ゲームフィールドを追加し、後でダイナミックフィールドゲームをgame1、game2などのフィールドに追加すると、それらは保存されます。

class Game(EmbeddedDocument): 
    iscomplete = fields.BooleanField() 
    score = fields.IntField()  

class Progress(DynamicDocument): 
    user = ReferenceField(User, dbref=True) 
    created_at = DateTimeField() 
    updated_on = DateTimeField() 

    p = Progress() 
    p.game1 = Game(iscomplete=True, score=10) 
    p.game2 = Game(iscomplete=False, score=5) 
    p.save() 
関連する問題