Проблемы с проверкой вложенных значений - PullRequest
0 голосов
/ 02 марта 2020

Я хочу добавить проверку к моей конечной точке API с помощью Marshmallow.

Я сталкиваюсь с проблемой, как правильно проверить этот чанк. Конечная цель - убедиться, что число показов положительное.

Я был бы очень признателен за любую помощь или понимание, которое вы можете предоставить. Первый раз с использованием Зефира.

Образец Json:

{
    "mode": [
        {
            "type": "String",
            "values": {
                "visits": 1000,
                "budget": 400
            },
            "active": true
        }
    ]
}

Образец кода пытается проверить

class ValidateValues(BaseSchema):
    visits = fields.Int(allow_none=True, validate=[validate.Range(min=0, error="Value must be greater than 0")])
    budget = fields.Int(allow_none=True, validate=[validate.Range(min=0, error="Value must be greater than 0")])


class ModeSchema(BaseSchema):
    type = fields.String(required=True)
    active = fields.Boolean(required=True)
    values = fields.Nested(ValidateValues)


class JsonSchema(BaseSchema):
    mode = fields.List(fields.Dict(fields.Nested(ModeSchema, many=True)))

Текущий результат

{
    "mode": {
        "0": {
            "type": {
                "key": [
                    "Invalid type."
                ]
            },
            "values": {
                "key": [
                    "Invalid type."
                ]
            },
            "active": {
                "key": [
                    "Invalid type."
                ]
            }
        }
    }
}

1 Ответ

1 голос
/ 04 марта 2020

Вы просто используете список Nested полей. Нет необходимости в Dict, здесь.

И нет необходимости в many=True, поскольку вы помещаете поле Nested в поле List.

Попробуйте это:

class JsonSchema(BaseSchema):
    mode = fields.List(fields.Nested(ModeSchema))
...