marshmallow-mongoengine: отсутствует поле выходного дампа ‘None’

#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': []}