mongoengine разыменование вложенных документов - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть несколько моделей монго.Например, User, который ссылается на Role с некоторыми свойствами.Теперь, когда я получаю пользователей, я хочу, чтобы свойство ролей заполнялось теми, на которые ссылается объект роли, а не идентификатор объекта.


from mongoengine import *

connect('test_database')

class Role(Document):
    name = StringField(required=True)
    description = StringField(required=True)

class User(Document):
    role = ReferenceField(Role, reverse_delete_rule=DENY)

r = Role(name='test', description='foo').save()
User(role=r).save()

print(User.objects().select_related()[0].to_mongo().to_dict())

# prints: {'_id': ObjectId('5c769af4e98fc24f4a82fd99'), 'role': ObjectId('5c769af4e98fc24f4a82fd98')}
# want:   {'_id': '5c769af4e98fc24f4a82fd99', 'role': {'name' : 'test', 'description' : 'foo'}}

Как мне добиться этого для любого сложного объекта mongoengine?

1 Ответ

0 голосов
/ 29 мая 2019

Mongoengine не предоставляет ничего из коробки, но вы можете либо определить метод (например, to_dict (self)) для вашего класса Document, либо использовать библиотеку сериализации, такую ​​как marshmallow-mongoengine

...