【发布时间】:2020-03-02 15:07:00
【问题描述】:
我尝试从网页获取数据。此页面包含几个发布信息,但允许不设置值。 IE。测试从/到的日期可能是一个空字符串。
现在我尝试反序列化从页面中提取的所有数据以将其插入到数据库中,并在处理空日期时遇到问题。
from marshmallow import fields, Schema, ValidationError
class TestSchema(Schema):
training_necessary = fields.Function(deserialize=lambda x: True if x == 'Yes' else False)
test_from = fields.Date()
test_to = fields.Date()
data = dict(training_necessary='Yes', test_from='', test_to='')
try:
validated = TestSchema().load(data)
except ValidationError as err:
print(f"{err}")
结果:
{'test_to': ['Not a valid date.'], 'test_from': ['Not a valid date.']}
我已经尝试了几种allow_none=True 或default='' 的组合,但没有一个能帮助我通过。那么,如何管理允许空日期?在这种情况下,将默认值设置为有点像 1970-01-01 将无济于事。
有什么提示吗?
问候,托马斯
+++ 编辑:解决方案 +++ 这是我在 Jérômes 提供帮助后得到的工作代码:
from marshmallow import fields, Schema, ValidationError, pre_load
class TestSchema(Schema):
training_necessary = fields.Function(deserialize=lambda x: True if x == 'Yes' else False)
test_from = fields.Date(allow_none=True)
test_to = fields.Date(allow_none=True)
@pre_load(pass_many=False)
def string_to_none(self, data, many, **kwargs):
turn_to_none = lambda x: None if x == '' else x
for k, v in data.items():
data[k] = turn_to_none(v)
return data
data = dict(training_necessary='Yes', test_from='', test_to='')
try:
validated = TestSchema().load(data)
except ValidationError as err:
print(f"{err}")
【问题讨论】:
标签: python marshmallow