验证Marshmallow中列表元素的唯一性。

3
我想了解是否可以使用 marshmallow 的验证函数来检查列表中的所有元素是否唯一。
我有以下模式:
from marshmallow import Schema, fields, validate

class PaymentSchema(Schema):
    ...
    currencies = fields.List(
        fields.String(
            required=True,
            validate=[
                validate.OneOf(["USD", "EUR", "AUS", "GBP"]),
                validate.Length(min=1, max=4)
            ]
        )
    )

有没有可能保证在给定一个带有重复货币的货币列表(["USD", "EUR", "EUR"])时引发ValidationError?谢谢!
1个回答

5

validates 装饰器 允许自定义验证:

from marshmallow import Schema, ValidationError, fields, validate, validates

class PaymentSchema(Schema):
    currencies = fields.List(
        fields.String(
            required=True,
            validate=[
                validate.OneOf(["USD", "EUR", "AUS", "GBP"]),
                validate.Length(min=1, max=4)
            ]
        )
    )

    @validates('currencies')
    def no_duplicate_currencies(self, value):
        if len(value) != len(set(value)):
            raise ValidationError('currencies must not contain duplicate elements')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接