python marshmallow force field.int只接受int而不是字符串

时间:2018-05-02 20:15:45

标签: python int marshmallow

我有一个marshmallow整数字段,但在传递数据时非常奇怪 因为{number:" 123"}也可以工作,好像是一个整数,我会假设内部正在转换为int,但我不想要强制用户使用因为没有混淆什么数据类型可以接受,有没有一种方法或参数?

number = fields.Integer(required=True,
                        validate=Range(min=1, error="Value must be greater than 0"))

感谢帮助人员。

2 个答案:

答案 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