使用wtforms_components的Unique()
验证程序(使用Flask和SQLAlchemy)时,表单中显示的默认错误消息是“已存在”。如何更改此错误消息就像我可以更改DataRequired()
验证程序的错误消息一样简单?
DataRequired()
验证程序的错误消息可以像这样更改:
from wtforms.validators import DataRequired
class SignupForm():
email = EmailField('Email', validators=[DataRequired('THIS IS MY NEW ERROR MESSAGE.')])
这会更改“这是必需的”默认错误消息。 “这是我的新错误信息。”我正在寻找一个类似简单而优雅的解决方案,用于更改wtforms_components Unique()
验证器的默认错误消息
我希望有以下内容。但是,它不起作用:
from wtforms_components import Unique
class SignupForm():
email = EmailField('Email', validators=[Unique(User.email, get_session=lambda: db.session, 'THIS IS MY NEW ERROR MESSAGE.')])
方式,验证器正常工作(使用默认错误消息)如下:
from wtforms_components import Unique
class SignupForm():
email = EmailField('Email', validators=[Unique(User.email, get_session=lambda: db.session)])
我正在使用以下套餐:
Flask==0.10.1
Flask-SQLAlchemy==2.1
Flask-WTF==0.9.5
WTForms-Components==0.9.7
我在WTForms-Alchemy文档中找不到解决方案(http://wtforms-alchemy.readthedocs.io/en/latest/validators.html)。另外,我没有在WTForms-Components文档(http://wtforms-components.readthedocs.io/en/latest/#unique-validator)中找到解决方案。这个论坛也没有解决方案。
非常感谢您的提示。
答案 0 :(得分:0)
Unique()
函数的源代码清楚地显示了您传递的第3个参数message
作为错误消息。 (这就是你似乎正在做的事情。)
https://github.com/kvesteri/wtforms-alchemy/blob/master/wtforms_alchemy/validators.py
class Unique(object): """Checks field values unicity against specified table fields. :param column: InstrumentedAttribute object, eg. User.name, or Column object, eg. user.c.name, or a field name, eg. 'name' or a tuple of InstrumentedAttributes, eg. (User.name, User.email) or a dictionary mapping field names to InstrumentedAttributes, eg. { 'name': User.name, 'email': User.email } :param get_session: A function that returns a SQAlchemy Session. This parameter is not needed if the given model supports Flask-SQLAlchemy styled query parameter. :param message: The error message. """ field_flags = ('unique', ) def __init__(self, column, get_session=None, message=None): self.column = column self.message = message self.get_session = get_session
我建议您可能还有其他问题 - 您获得的错误以及堆栈跟踪是什么?
答案 1 :(得分:0)
非常感谢,shumuels!我没有指定密钥 message = ,这就是它无法正常工作的原因。如果我在文档中找不到答案,我将来会在Github上查看源代码。
from wtforms_components import Unique
class SignupForm():
email = EmailField('Email', validators=[Unique(User.email, get_session=lambda: db.session, message='THIS IS MY NEW ERROR MESSAGE.')])