1

我使用以下模式来验证数据:

class UserSchema(db_schema.Schema):
    email = data_fields.Email(required = True, 
    error_messages={
          'required': 'Email is mandatory field.', 
          'type': 'The manager email is not valid.'
    })

但是 ValidationError.messages.items 有以下消息:

 "Not a valid email address."

如何让它显示我的自定义消息?error_messages 字典是否有完整的可能值列表,因为我怀疑我也需要覆盖其他消息。

4

3 回答 3

3

看看 https://github.com/marshmallow-code/marshmallow/blob/dev/src/marshmallow/fields.py

Field 类定义了“required”、“null”和“validator_failed”

class Field(FieldABC):
     ...
     default_error_messages = {
            "required": "Missing data for required field.",
            "null": "Field may not be null.",
            "validator_failed": "Invalid value.",
        }
     ...

特定的字段实现继承了这些消息并可能扩展列表。例如,电子邮件定义附加错误消息“无效”

class Email(String):
    ...
    default_error_messages = {"invalid": "Not a valid email address."}
    ...

注意:看起来电子邮件和其他字段会覆盖 default_error_messages(而不是扩展它们),但实际上错误消息是“收集的”显式的,包括父类

class Field(FieldABC):
    ...
    # Collect default error message from self and parent classes
    messages = {}  # type: typing.Dict[str, str]
    for cls in reversed(self.__class__.__mro__):
        messages.update(getattr(cls, "default_error_messages", {}))
    messages.update(error_messages or {})
    self.error_messages = messages
    ...
于 2020-09-17T18:55:23.110 回答
0

我发现 error_messages 字典是错误的,关键应该是“无效”:

class UserSchema(db_schema.Schema):
    email = data_fields.Email(required = True, 
    error_messages={
          'required': 'Email is mandatory field.', 
          'invalid': 'The manager email is not valid.'
    })
于 2020-09-17T18:51:45.033 回答
0
error_messages = {
    'required': 'Missing data for required field.',
    'null': 'Field may not be null.',
    'validator_failed': 'Invalid value.',
} 

你做得对,但要使用的关键是“validator_failed”。这将在验证失败时覆盖默认错误消息!

于 2021-05-19T14:23:23.420 回答