Как включить дополнительные, неизвестные поля при загрузке данных с помощью marshmallow-mongoengine? - PullRequest
0 голосов
/ 06 марта 2019

Я создаю REST API поверх Flask и Connexion , используя marshmallow-mongoengine и MongoEngine для работы с MongoDB .

Проблема: Если мои входные данные содержат дополнительные поля unknown , они всегда исключаются из результирующего объекта при загрузке данных с помощью marshmallow-mongoengine;даже если мой документ MongoEngine должен разрешать их при расширении DynamicDocument.Например,

# Imports
from marshmallow_mongoengine import ModelSchema
from mongoengine.document import DynamicDocument
from mongoengine.fields import StringField, UUIDField
from pprint import pprint

# MongoEngine document
class User(DynamicDocument):
    id = UUIDField(required=True, binary=False, primary_key=True)
    first_name = StringField(required=True)
    last_name = StringField(required=True)

# Marshmallow schema with the Marshmallow-MongoEngine mapping
class UserSchema(ModelSchema):
    class Meta:
        model = User

# Usage
# Initialization
user_schema = UserSchema()
user_data = {
    "id": "77640cb5-75c9-4794-9581-5d7e2009cb78",
    "first_name": "John",
    "last_name": "Doe",
    "age": 50 # additional, unknown field
}

# Load user data
user = user_schema.load(data=user_data).data
pprint(user.to_mongo())
# {'_id': '77640cb5-75c9-4794-9581-5d7e2009cb78',
#  'first_name': 'John',
#  'last_name': 'Doe'}

# Dump user
data = user_schema.dump(obj=user).data
pprint(data)
# {'first_name': 'John',
#  'id': '77640cb5-75c9-4794-9581-5d7e2009cb78',
#  'last_name': 'Doe'}

Как видно из примера, поле age исключено из загруженного объекта user.

Вопрос: Каквключить дополнительные поля unknown при загрузке данных с помощью marshmallow-mongoengine?Что мне не хватает?Или, может быть, есть лучший способ работы с MongoDB.В любом случае, я хотел бы иметь возможность контролировать (de) сериализованные поля и иметь возможность возвращать JSON, аналогичный показанному в выходных данных «Dump user», но с включенным полем age.

...