Пилоны / Форменкод с несколькими флажками

Сегодня я столкнулся с несколькими проблемами с Pylons / Formencode, когда дело дошло до проверки нескольких флажков. В качестве фона у меня есть что-то вроде этого в моем шаблоне Mako:

<input type="checkbox" name="Project" value="1">Project 1</input>
<input type="checkbox" name="Project" value="2">Project 2</input>
<input type="checkbox" name="Project" value="3">Project 3</input>
<input type="checkbox" name="Project" value="4">Project 4</input>
<input type="checkbox" name="Project" value="5">Project 5</input>

В моей схеме проверки у меня было что-то вроде этого (пожалуйста, простите любые ошибки - у меня нет точного кода передо мной):

Project = formencode.foreach.ForEach(formencode.validators.Int())

Я ожидал получить список отмеченных элементов (звучит разумно, правда?), Но вместо этого я получил список с одним элементом, несмотря на то, что были отмечены все флажки. Я делаю это неправильно, или то, что я хочу вернуть, возможно? Я написал хитрость вокруг него с onclicks для каждого элемента флажка, который добавляет отмеченный элемент в массив, который затем отправляется обратно в формате JSON - это уродливо и больно, так как я должен сам заново заполнить все поля, если проверка не удалась.

У кого-нибудь есть идеи?


person redrockettt    schedule 14.10.2009    source источник
comment
Хммм, похоже, Set () этого добьется. Спасибо за игру!   -  person redrockettt    schedule 14.10.2009


Ответы (2)


возможно, используя formencode.validators.Set:

>>> Set.to_python(None)
[]
>>> Set.to_python('this')
['this']
>>> Set.to_python(('this', 'that'))
['this', 'that']
>>> s = Set(use_set=True)
>>> s.to_python(None)
set([])
>>> s.to_python('this')
set(['this'])
>>> s.to_python(('this',))
set(['this'])
person nosklo    schedule 14.10.2009

Redrockettt,

Вы смотрели строку документации для variabledecode? Он предлагает вам использовать что-то вроде:

<input type="checkbox" name="Project-1" value="1">Project 1</input>
<input type="checkbox" name="Project-2" value="2">Project 2</input>
<input type="checkbox" name="Project-3" value="3">Project 3</input>

Проверьте текст в variabledecode.py или вставьте сюда.

person Seth    schedule 15.10.2009