У меня есть приложение Pylons, и я использую FormEncode и HtmlFill для обработки моих форм. У меня есть массив текстовых полей в моем шаблоне (Mako)
<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.
Однако для этих полей проверка не выполняется.
UPDATE
В соответствии с запросом здесь приведен код действия этого контроллера. Я знаю, что это работает, так как я могу проверить другие поля формы.
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')
UPDATE
На 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())