使用输入参数对 marshmallow 进行验证

Using input parameters for validation with marshmallow

是否可以将参数传递给棉花糖模式以用于加载验证?

我有以下架构:

from marshmallow import Schema, fields, validate

class ExampleSchema(Schema):
    tags = fields.List(fields.String(), validate=ContainsOnly(["a", "b", "c"]))

我想知道是否可以在其中输入参数而不是键入 "a", "b", "c"?像

class ExampleSchema(Schema, list_of_allowed_tags):
    tags = fields.List(fields.String(), validate=ContainsOnly(list_of_allowed_tags))

除非这不起作用,因为导入时会出现以下错误

NameError: name 'list_of_allowed_tags' is not defined

还有其他想法吗?

不,marshmallow Schema 不会那样做。

您可以使用模式工厂。

import marshmallow as ma


def example_schema_factory(list_of_allowed_tags):

    class ExampleSchema(ma.Schema):
        tags = ma.fields.List(
            ma.fields.String(),
            validate=ma.validate.ContainsOnly(list_of_allowed_tags)
        )

    return ExampleSchema

请看下面link的答案:

https://marshmallow.readthedocs.io/en/stable/custom_fields.html#adding-context-to-method-and-function-fields