Python 加载时强制“无”,转储时跳过“无”
我使用2.0.0rc2验证HTTP请求上的输入数据,并将SQLAlchemy模型加载到HTTP响应上的JSON。我偶然发现了两个问题: 首先,在HTTP PUT请求上从JSON加载数据时,我希望将所有缺少的字段填充为None,以正确覆盖SQLAlchemy中的数据。现在我正在使用以下代码: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[
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)