Как изменить сообщение об ошибке валидатора Unique () для wtforms_components? - PullRequest
0 голосов
/ 01 июня 2018

При использовании валидатора Unique() для wtforms_components (с Flask и SQLAlchemy) сообщение об ошибке по умолчанию, отображаемое в форме, называется «Уже существует».Как изменить это сообщение об ошибке так же легко, как изменить сообщение об ошибке валидатора DataRequired()?


Сообщение об ошибке валидатора DataRequired() можно изменить следующим образом:

from wtforms.validators import DataRequired


class SignupForm():
    email = EmailField('Email', validators=[DataRequired('THIS IS MY NEW ERROR MESSAGE.')])

Это меняет сообщение об ошибке по умолчанию с «Это необходимо».на "Это мое новое сообщение об ошибке."Я ищу такое же простое и элегантное решение для изменения сообщения об ошибке по умолчанию Unique() валидатор wtforms_components


Я надеялся, что есть что-то вроде следующего.Однако это не работает:

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 голосов
/ 01 июня 2018

Большое спасибо, 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.')])
0 голосов
/ 01 июня 2018

Исходный код для функции Unique() ясно показывает, что существует третий параметр с именем 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

Я полагаю, у вас может быть другая проблема - в чем ошибкачто вы получаете, а также трассировки стека?

...