我从另一个源接收数据,有时发送int,有时发送给定变量的字符串: location。例如,他们将1,2,或3,或他们将发送“建筑”或“汽车”或“公共汽车”作为一个例子。
我试过了
location = fields.Int(allow_string=True, strict=False),这将产生以下错误
marshmallow.exceptions.ValidationError:{'status':‘非有效整数。’}
和
location = fields.Str(allow_int=True, strict=False),这将产生以下错误
marshmallow.exceptions.ValidationError:{“状态”:“无效字符串。”}
但两者都不适用于这两种类型。有没有一种方法可以接受这两种类型:字符串和ints?
发布于 2020-06-09 16:11:09
棉花糖的fields.Number ( fields.Integer、fields.Float和field.Decimal继承的)将很高兴地接受有效的“可转换”字符串。
这意味着您可以随意地将一个整数或字符串传递给它们,而无需发出任何问题。但是,如果转换失败,您将面临异常。
class MySchema(Schema):
foo = fields.Integer()
MySchema().load({"foo": "123"})
# prints {"foo": 123}
MySchema().load({"foo": 456})
# prints {"foo": 456}
MySchema().load({"foo": "bar"})
# marshmallow.exceptions.ValidationError: {'foo': ['Not a valid integer.']}相反,fields.String将不接受任何整数。
class MySchema(Schema):
foo = fields.Integer()
MySchema().load({"foo": "bar"})
# prints {"foo": "bar}
MySchema().load({"foo": 123})
# marshmallow.exceptions.ValidationError: {'foo': ['Not a valid string.']}如果输入是整数或包含整数的字符串,则可以使用fields.Integer解析它们。
如果这是更随意的东西,您需要使用@ something提到的自定义字段,并定制_deserialize和_serialize来处理您的数据。
https://stackoverflow.com/questions/53657543
复制相似问题