我使用以下架构来验证数据:
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词典的可能值的完整列表,因为我怀疑我也需要覆盖其他消息。
答案 0 :(得分:1)
看看 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
...
答案 1 :(得分: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.'
})
答案 2 :(得分:0)
error_messages = {
'required': 'Missing data for required field.',
'null': 'Field may not be null.',
'validator_failed': 'Invalid value.',
}
您做得对,但要使用的密钥是“validator_failed”。这将在验证失败时覆盖默认错误消息!