如何更改wtforms_components的Unique()验证程序的错误消息?

时间:2018-05-31 22:38:21

标签: python flask flask-sqlalchemy flask-wtforms

使用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)中找到解决方案。这个论坛也没有解决方案。

非常感谢您的提示。

2 个答案:

答案 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.')])