Зефир Python Force Field.int принимать только Int, а не строки - PullRequest
0 голосов
/ 02 мая 2018

У меня есть целочисленное поле зефира, но очень странно, когда я передаю данные так как {число: "123"} также работает, как если бы это было целое число, я бы предположил, что внутренне выполняет преобразование в int, но не хочу, чтобы я хотел, чтобы пользователь все время использовал INT, так что есть нет путаницы в том, что типы данных могут принимать, есть ли способ или параметр для этого?

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

спасибо за помощь, ребята.

1 Ответ

0 голосов
/ 03 мая 2018

Глядя на код Я думаю, что это невозможно, и я удивлен этим. Я знаю, что можно установить флаг строгий , но он работает только в определенных случаях. Обратите внимание:

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

Что я нахожу противоречивым. Возможно, вам лучше всего написать пользовательское поле или другой валидатор, который проверяет ввод перед его передачей в вашу схему.

...