Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 加载时强制“无”,转储时跳过“无”_Python_Marshmallow - Fatal编程技术网

Python 加载时强制“无”,转储时跳过“无”

Python 加载时强制“无”,转储时跳过“无”,python,marshmallow,Python,Marshmallow,我使用2.0.0rc2验证HTTP请求上的输入数据,并将SQLAlchemy模型加载到HTTP响应上的JSON。我偶然发现了两个问题: 首先,在HTTP PUT请求上从JSON加载数据时,我希望将所有缺少的字段填充为None,以正确覆盖SQLAlchemy中的数据。现在我正在使用以下代码: for name, field in schema.fields.iteritems(): if field.missing == ma.missing: schema.fields[

我使用2.0.0rc2验证HTTP请求上的输入数据,并将SQLAlchemy模型加载到HTTP响应上的JSON。我偶然发现了两个问题:

首先,在HTTP PUT请求上从JSON加载数据时,我希望将所有缺少的字段填充为None,以正确覆盖SQLAlchemy中的数据。现在我正在使用以下代码:

for name, field in schema.fields.iteritems():
    if field.missing == ma.missing:
        schema.fields[name].missing = None
它可以工作,但我想它被窃听了,因为我正在处理
marshmallow.Field
实例附加到
Schema
类。在处理
Schema
instance之后,我们修补的所有字段都将保留新的缺失字段,而不是默认字段

第二,在将数据从SQLAlchemy转储到JSON时,所有缺少的字段都被解析为无,JSON填充了
{“key”:null,}
数据。这是不必要的行为,我正在
post\u dump
触发器上清除它们

@post_dump
def clean_missing(self, data):
    for key in filter(lambda key: data[key] is None, data):
        data.pop(key)
    return data
和前面一样,它正在工作,但包括创建一些
BaseSchema
类,该类将此逻辑传递给所有继承的类


我在文档中搜索了一会儿,没有找到任何正确的方法来交换这种行为,即在转储时跳过字段,在加载时用
None
填充字段。是我遗漏了什么还是棉花糖没有提供这些功能

若要强制无负载,可以使用:

missing–如果在输入数据中找不到字段,则该字段的默认反序列化值。可以是值,也可以是可调用的

关于第二点,似乎是说从2.0开始,缺少的字段将从序列化输出中排除

class ExampleSchema(Schema):
    field_a = fields.Int(missing=None)