Marshmallow - превратить пустую строку в пустую - PullRequest
0 голосов
/ 13 июля 2020

Я получаю тело письма со строками None вместо "".

Я пробовал использовать missing, default, allow_none и другие хаки, которые я нашел в Интернете, но ничего не работает.

Я хочу превратить None в "" в своей схеме. Я думал, что простой email = fields.String(missing = "") подойдет, но я полагаю, что None не считается пропущенным.

Схема:

class CustomerSchema(Schema):
    @post_dump
    def change_none_to_string(self, data, **kwargs):
        for field in data:
            if data[field] is None:
                data[field] = ""
        return data

    firstname = fields.String(missing = "")
    lastname = fields.String(missing = "")
    email = fields.String(missing = "")

1 Ответ

0 голосов
/ 13 июля 2020

Вы можете использовать функцию пост-дампа или предварительной загрузки, чтобы изменить что-либо в вашем вводе или выводе перед обработкой, например, добавление:

@post_dump
def change_none_to_string(self, data, **kwargs)
    for field in data:
        if data[field] is None:
            data[field] = ""
    return data

в вашу схему должно означать, что ваш вывод содержит все поля None заменены на "", и вы можете сделать то же самое с предварительной загрузкой для ввода.

Предполагая, что ваш ввод - это необработанный текст в json (это может быть не так, я не видел вашего input), это должно сработать, но это зависит от того, как именно отформатирован ваш ввод:

@pre_dump
def change_none_to_string_input(self, data, **kwargs):
    for field in data:
        data[field] = data[field].replace("null", '""')
    return data

Проверьте https://marshmallow.readthedocs.io/en/stable/extending.html, чтобы получить более подробную информацию об этом.

...