私は動的なフィールドにドキュメントを埋め込もうとしています。しかし、私が後でそれにアクセスしようとすると、それはもはやドキュメントオブジェクトではなく、ちょうどディクテーションです。DynamicFieldにmongoengineが埋め込まれたドキュメント
#defining the documents
class Embed(EmbeddedDocument):
field_1 = StringField(db_field='f')
class Doc(Document):
myid = IntField(required=True, unique=True, primary_key=True)
embed_me = DynamicField(db_field='e')
field_x = StringField(db_field='x')
を、私は新しい文書を作成し、それを保存します:すべてがOKです
connect('test')
# the embedded part
embed = Embed(field_1='this is a test')
# the document with the embedded document
doc = Doc(pk=2)
doc.embed_me = embed
doc.save()
これまでのところ、ここで
は私がちょうど作ったサンプルコードです。これは私がデシベルで得るものです:
# > db.doc.find()
# { "_id" : 1, "e" : { "f" : "this is a test", "_cls" : "Embed" } }
しかし、今、私はドキュメントを要求し、私は例外を取得埋め込まれた文書からの値にアクセスしようとした場合:ちょうど参照用
doc, c = Doc.objects.get_or_create(pk=1)
:メインdocにアクセスが
print doc.field_x
> None
も参照して動作します:埋め込まれたドキュメントの名前が翻訳されていないことを除いてdictのは、大丈夫に見える
print doc.__dict__
> {'_created': False, '_data': {'myid': 1, 'embed_me': {u'_cls': u'Embed', u'f': u'this is a test'}, 'field_x': None}, '_changed_fields': [], '_initialised': True}
と埋め込まれたドキュメントにアクセスしようとしながら、今、例外が
print doc.embed_me.field_1
> File "embed_err.py", line 31, in <module>
print doc.embed_me.field_1
AttributeError: 'dict' object has no attribute 'field_1
それがどのようなタイプで上昇?
type(doc.embed_me)
> <type 'dict'>
埋め込みドキュメントがオブジェクト内で翻訳されていないようです。これがバグか、私がそのコンセプトを誤解しているかどうかは分かりません。アドバイスありがとう。 docsから
ありがとう。これはバグですので、次のリリースを待つことにします。 – manuel
ちょうど新しいバージョンを得ました、今期待どおりに動作します。どうもありがとう。 – manuel