我有一个marshmallow整数字段,但在传递数据时非常奇怪 因为{number:" 123"}也可以工作,好像是一个整数,我会假设内部正在转换为int,但我不想要强制用户使用因为没有混淆什么数据类型可以接受,有没有一种方法或参数?
number = fields.Integer(required=True,
validate=Range(min=1, error="Value must be greater than 0"))
感谢帮助人员。
答案 0 :(得分:3)
看着the code我认为这是不可能的,我对此感到惊讶。我知道你可以设置一个 strict 标志,但它只在某些情况下运行。观察:
from marshmallow import *
from marshmallow.validate import Range
class MySchema(Schema):
number = fields.Integer(strict=True, required=True, validate=[Range(min=1, error="Value must be greater than 0")])
在这种情况下适用:
s = MySchema()
s.dumps({'number': "123.1"})
>>> MarshalResult(data='{}', errors={'number': ['Not a valid integer.']})
但不是在这些情况下
s.dumps({'number': 123.1})
>>> MarshalResult(data='{"number": 123}', errors={})
s.dumps({'number': "123"})
>>> MarshalResult(data='{"number": 123}', errors={})
我觉得不一致。也许你最好的选择是编写一个custom field或一个不同的验证器,在输入传递给你的模式之前验证输入。
答案 1 :(得分:0)
如果您现在阅读此内容,则可以在字段上设置strict=True