#mongoengine
#mongoengine
Вопрос:
В моем проекте используется flask mongoengine marshmallow, когда я использовал marshmallow для сериализации модели, в возвращаемом значении отсутствовало поле, а отсутствующее значение поля было None.При использовании Django для сериализации полей значение None по-прежнему является выходной моделью
class Author(db.Document):
name = db.StringField()
gender = db.IntField()
books = db.ListField(db.ReferenceField('Book'))
def __repr__(self):
return '<Author(name={self.name!r})>'.format(self=self)
class Book(db.Document):
title = db.StringField()
сериализаторы
class AuthorSchema(ModelSchema):
class Meta:
model = Author
class BookSchema(ModelSchema):
class Meta:
model = Book
author_schema = AuthorSchema()
Когда я делаю это:
author = Author(name="test1")
>>> author.save()
<Author(name='test1')>
>>> author_schema.dump(author)
MarshalResult(data={'id': '5c80a029fe985e42fb4e6299', 'name': 'test1'}, errors={})
>>>
не возвращает books
поле
Я надеюсь вернуть
{
"name":"test1",
"books": None
}
что мне делать?
Ответ №1:
Когда я просмотрел исходный код marshmallow-mongoengine
библиотеки, я нашел решение model_skip_values=()
в файле тестов.
def test_disable_skip_none_field(self):
class Doc(me.Document):
field_empty = me.StringField()
list_empty = me.ListField(me.StringField())
class DocSchema(ModelSchema):
class Meta:
model = Doc
model_skip_values = ()
doc = Doc()
data, errors = DocSchema().dump(doc)
assert not errors
assert data == {'field_empty': None, 'list_empty': []}