Пилоны FormEncode с массивом элементов формы
У меня есть приложение Pylons, и я использую FormEncode и HtmlFill для обработки моих форм. У меня есть массив текстовых полей в моем шаблоне (Мако)
<tr> <td>Yardage</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> <td>${h.text('yardage[]', maxlength=3, size=3)}</td> </tr>
Тем не менее, я не могу понять, как проверить эти поля. Вот соответствующая запись из моей схемы
yardage = formencode.ForEach(formencode.validators.Int())
Я пытаюсь проверить, что каждое из этих полей является Int. Однако для этих полей проверка не выполняется.
ОБНОВИТЬ В соответствии с запросом здесь приведен код действия этого контроллера. Я знаю, что это работает, так как я могу проверить другие поля формы.
def submit(self): schema = CourseForm() try: c.form_result = schema.to_python(dict(request.params)) except formencode.Invalid, error: c.form_result = error.value c.form_errors = error.error_dict or {} c.heading = 'Add a course' html = render('/derived/course/add.html') return htmlfill.render( html, defaults = c.form_result, errors = c.form_errors ) else: h.redirect_to(controler='course', action='view')
ОБНОВИТЬ На IRC было предложено изменить название элементов сyardage[]
вyardage
Безрезультатно. Все они должны быть целыми числами, но вставка f в один из элементов не делает его недействительным. Как я уже говорил, я могу проверить другие поля формы. Ниже вся моя схема.
import formencode class CourseForm(formencode.Schema): allow_extra_fields = True filter_extra_fields = True name = formencode.validators.NotEmpty(messages={'empty': 'Name must not be empty'}) par = formencode.ForEach(formencode.validators.Int()) yardage = formencode.ForEach(formencode.validators.Int())