0

我有一个现有的(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。

我会错过什么?

[1] - https://deformdemo.pylonsproject.org/interfield/

4

1 回答 1

0

事实证明,变形不会自动处理验证,我必须实际调用验证,如下所示:-

try:
    appstruct = form.validate(request.POST.items())
except deform.ValidationFailure as e:
    return {'form': e.render()}
于 2016-11-15T10:06:51.147 回答