LINUX.ORG.RU

flask-wtforms как работают фильтры полей?

 ,


0

1

В документации wtforms внятно не описано, как их применять, нет практичных примеров. Вот, допустим, есть класс:

class AddForm(FlaskForm):
    name = StringField('Название', filters=[name_to_upper(name)], validators=[DataRequired()])
    
    def name_to_upper(name):
        return name.upper()

Как мне name_to_upper применить внутри класса к name после его ввода (судя по докам и до валидации)?

Если пробовать в таком виде, как у меня, ругается

name = StringField('Название', filters=[name_to_upper(name)], validators=[DataRequired()])                                                                

                                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
NameError: name 'name' is not defined

Какую подстановку использовать?



Последнее исправление: demonworm (всего исправлений: 1)

Так по твоей же ссылке написано что filters is a sequence of callable. А ты вызываешь функцию, да ещё и с тем же параметром, который определяется в этом же стейтменте. И там же написано в примере то, что ты хочешь - filters=[str.upper]

PS: мимокрокодил, фласк забыл даже если что-то знал.

MadMax
()
Ответ на: комментарий от MadMax

Переписал (тоже нашел тут пример).

def name_to_upper(name):
    return name.upper()


class AddForm(FlaskForm):
    name = StringField('Название', filters=[name_to_upper], validators=[DataRequired()])

В итоге получаю

    return name.upper()
           ^^^^^^^^^^^^^^^^^^^^^^^

AttributeError: 'NoneType' object has no attribute 'upper'

просто переходя на страницу с формами (до отправки данных, потому там и NoneType)… Почему он не ждет, когда я заполню поля и отправлю данные - не понятно. В модуле валидация идет по form.validate_on_submit().

    form = AddForm()

    if form.validate_on_submit():
        name = form.name.data
demonworm
() автор топика