我正在使用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[name].missing = None
它可以工作,但我想它有问题,因为我正在搞乱marshmallow.Field
附加到Schema
类的实例。并且在处理完Schema
实例后,我们修补的所有字段都将卡在新的缺失而不是默认字段。
其次,在将数据从 SQLAlchemy 转储到 JSON 时,所有丢失的字段都被解析为 None,并且 JSON 填充了{"key": null, }
数据。这是不受欢迎的行为,我在post_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
在加载时填充字段。我错过了什么或棉花糖不提供这样的功能吗?