diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index 7fcc2ad2..0428095a 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -1,5 +1,7 @@ from bson import DBRef, SON +from mongoengine.python_support import txt_type + from base import ( BaseDict, BaseList, EmbeddedDocumentList, TopLevelDocumentMetaclass, get_document @@ -226,7 +228,7 @@ class DeReference(object): data[k]._data[field_name] = self.object_map.get( (v['_ref'].collection, v['_ref'].id), v) elif isinstance(v, (dict, list, tuple)) and depth <= self.max_depth: - item_name = "{0}.{1}.{2}".format(name, k, field_name) + item_name = txt_type("{0}.{1}.{2}").format(name, k, field_name) data[k]._data[field_name] = self._attach_objects(v, depth, instance=instance, name=item_name) elif isinstance(v, (dict, list, tuple)) and depth <= self.max_depth: item_name = '%s.%s' % (name, k) if name else name diff --git a/tests/fields/fields.py b/tests/fields/fields.py index 9af87f7f..7575e8c6 100644 --- a/tests/fields/fields.py +++ b/tests/fields/fields.py @@ -1539,6 +1539,29 @@ class FieldTest(unittest.TestCase): actions__friends__operation='drink', actions__friends__object='beer').count()) + def test_map_field_unicode(self): + + class Info(EmbeddedDocument): + description = StringField() + value_list = ListField(field=StringField()) + + class BlogPost(Document): + info_dict = MapField(field=EmbeddedDocumentField(Info)) + + BlogPost.drop_collection() + + tree = BlogPost(info_dict={ + u"éééé": { + 'description': u"VALUE: éééé" + } + }) + + tree.save() + + self.assertEqual(BlogPost.objects.get(id=tree.id).info_dict[u"éééé"].description, u"VALUE: éééé") + + BlogPost.drop_collection() + def test_embedded_db_field(self): class Embedded(EmbeddedDocument):