LINUX.ORG.RU

Добавление параметров в теги форм в wtforms: правильно ли я делаю?

 , ,


0

1

Добрый день.
Оцените, я вообще правильно делаю, или забиваю костыли осциллографом:

Хочу добавить в поле <select> вызов функции по событию onchange. В wtforms нет готовых свойств для этого. Почитал сорцы, сделал такого монстра (вызов __call__ руками со своими параметрами):

   form = SearchPositionForm()
   form.position = form.position.widget.__call__(form.position,onchange='myfunction()')


- есть более нормальные варианты?

PS. А что, ВСЕ читают описание LORCode из кеша гугла, так как ява на LOR пишет ошибки?

★★★★★

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

В wtforms нет готовых свойств для этого.

И, пожалуй, это правильно. Вся кастомизация должна происходить в шаблонах. Иначе у тебя появляется связь между js-кодом и бэком. Таких макарон надо избегать как чумы.

Я бы просто сделал $('form input[name=«boo»]').change(...)

Но если так хочется усложнений, то это же питончик:

from wtforms import Form
from wtforms.fields import StringField


def attrs(field, **attrs):
    ocls = field.field_class
    def call(self, **kwargs):
        kw = attrs.copy()
        kw.update(kwargs)
        return ocls.__call__(self, **kw)

    field.field_class = type(ocls.__name__ + 'Custom', (ocls,), {'__call__': call})
    return field


class Boo(Form):
    boo = attrs(StringField(), onchange='onchange()')


print Boo().boo
bj
()
Ответ на: комментарий от Shadow

Ну, да. События DOM у нас теперь через питон вешаются.

Согласись, все питоноварианты куда прозаичнее, чем:

$("#my_select").on('change', my_event);
commit ★★
()
Последнее исправление: commit (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.