У меня есть существующий проект пирамиды (WIP), в котором все упрощенные формы выполняются вручную. Поскольку требования пользователей постоянно усложнялись, я хотел интегрировать формы деформации, чтобы упростить свои собственные задачи по обслуживанию/программированию.
Мой первоначальный тест состоял в том, чтобы попытаться создать межполевую форму[1], цель которой состояла в том, чтобы гарантировать, что определенная дата предшествует другой дате в форме. Вот упрощенное определение схемы и валидатора:
class Schema(colander.MappingSchema):
startdate = colander.SchemaNode(colander.Date())
enddate = colander.SchemaNode(colander.Date())
def validator(form, value):
if value['enddate'] - value['startdate'] < 0:
exc = colander.Invalid(form, 'Start date must precede End date')
exc['enddate'] = 'Must be after %s' % value['startdate']
raise exc
schema = Schema(validator=validator)
form = deform.Form(schema, buttons=('submit',))
Затем я передаю форму моему шаблону mako и вызываю: -
${form.render() | n}
Это правильно отображает форму, и мои селекторы дат работают (конечно, после того, как мне пришлось возиться с загрузкой правильного CSS и javascripts). Однако щелчок «Отправить» не выполняет никакой проверки (даже базового «вы не ввели значение»), вместо этого он возвращается прямо к моему view_config.
Что я мог упустить?