próbuję osadzić dokument w dynamicznym polu. Ale kiedy próbuję uzyskać do niego dostęp później, nie jest to już obiekt dokumentu, to tylko dyktando.mongoengine osadzone dokument w DynamicField
Oto przykładowy kod Właśnie składa się:
#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')
potem utworzyć nowy dokument i zapisać go:
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()
Jak dotąd wszystko jest w porządku. To jest to, co mam w dB:
# > db.doc.find()
# { "_id" : 1, "e" : { "f" : "this is a test", "_cls" : "Embed" } }
Ale teraz, jeśli mogę zażądać dokumentu i próby uzyskania dostępu do wartości z dokumentu osadzonego uzyskać wyjątek:
doc, c = Doc.objects.get_or_create(pk=1)
tylko dla odniesienia: dostęp w głównym doc działa
print doc.field_x
> None
również odniesienie: dict wygląda w porządku, poza tym, że nazwy z osadzonym dokumencie nie są tłumaczone
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}
i teraz, podczas próby uzyskania dostępu do wbudowanego doc, wyjątek wznosi
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
jakiego rodzaju to jest?
type(doc.embed_me)
> <type 'dict'>
Wygląda na to, że osadzony dokument nie jest przetłumaczony na obiekt. Nie jestem pewien, czy to błąd, czy źle rozumiem koncepcję. Dzięki za jakąkolwiek radę.
dzięki za odpowiedź. więc to jest błąd i poczekam na następne wydanie. – manuel
właśnie dostałem nową wersję, działa teraz zgodnie z oczekiwaniami. wielkie dzięki. – manuel