Python 棉花糖强制 field.int 只接受 int 而不是字符串



>我有一个棉花糖整数字段,但是当我传递数据时很奇怪 因为 {number:"123"} 也可以工作,就好像是一个整数一样,我会假设内部正在转换为 int,但不希望我想强迫用户一直使用 INT,这样就不会混淆哪些数据类型可以接受,有没有办法或参数?

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

谢谢你们的帮助。

查看代码,我认为这是不可能的,我对此感到惊讶。我知道你可以设置一个严格的标志,但它只在某些情况下起作用。观察:

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={})

我觉得不一致。也许最好的选择是编写自定义字段或其他验证程序,以便在将输入传递到架构之前对其进行验证。

更新:看起来这个问题在最新版本的棉花糖中得到了修复

如果您现在阅读本文,则在字段上设置strict=True将起作用

最新更新