Skip to content

Commit 8a57a6e

Browse files
authored
Permite usar el to_dict de un EmbeddedDocumentField (#95)
* fix doc * version
1 parent 108945e commit 8a57a6e

File tree

3 files changed

+54
-7
lines changed

3 files changed

+54
-7
lines changed

mongoengine_plus/models/helpers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ def mongo_to_dict(obj, exclude_fields: list = None) -> dict:
6666
)
6767
return_data[field_name] = list_field_to_dict(data)
6868
elif isinstance(obj._fields[field_name], EmbeddedDocumentField):
69-
return_data[field_name] = mongo_to_dict(data, [])
69+
if callable(getattr(data, "to_dict", None)):
70+
return_data[field_name] = data.to_dict()
71+
else:
72+
return_data[field_name] = mongo_to_dict(data)
7073
elif isinstance(obj._fields[field_name], DictField):
7174
return_data[field_name] = data
7275
elif isinstance(obj._fields[field_name], EnumField):

mongoengine_plus/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
__version__ = '1.2.0'
1+
__version__ = '1.2.1'

tests/models/test_base.py

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,61 @@
1-
from mongoengine import Document, StringField
1+
from mongoengine import (
2+
Document,
3+
EmbeddedDocument,
4+
EmbeddedDocumentField,
5+
StringField,
6+
)
27

38
from mongoengine_plus.models import BaseModel
49

510

11+
class File(EmbeddedDocument):
12+
url = StringField()
13+
file_type = StringField()
14+
15+
16+
class Address(EmbeddedDocument, BaseModel):
17+
# Inheritance from BaseModel, to use _excluded and _hidden
18+
_excluded = ['reference']
19+
_hidden = ['secret_code']
20+
street = StringField()
21+
secret_code = StringField()
22+
reference = StringField()
23+
24+
625
class TestModel(BaseModel, Document):
7-
id = StringField()
26+
id = StringField(primary_key=True)
827
secret_field = StringField()
28+
address = EmbeddedDocumentField(Address)
29+
document = EmbeddedDocumentField(File)
30+
931
__test__ = False
1032
_hidden = ['secret_field']
1133

1234

1335
def test_hide_field():
14-
model = TestModel(id='12345', secret_field='secret')
36+
address = Address(
37+
street='123 Main St',
38+
reference='not display this',
39+
secret_code='898612',
40+
)
41+
doc = File(url='https://example.com', file_type='pdf')
42+
model = TestModel(
43+
id='12345',
44+
secret_field='secret',
45+
document=doc,
46+
address=address,
47+
)
1548
model_dict = model.to_dict()
16-
assert model_dict['secret_field'] == '********'
17-
assert model_dict['id'] == '12345'
49+
expected = {
50+
'id': '12345',
51+
'secret_field': '********',
52+
'address': {
53+
'street': '123 Main St',
54+
'secret_code': '********',
55+
},
56+
'document': {
57+
'url': 'https://example.com',
58+
'file_type': 'pdf',
59+
},
60+
}
61+
assert model_dict == expected

0 commit comments

Comments
 (0)