web2py: 自定义表单未提交

0 投票
2 回答
1970 浏览
提问于 2025-04-17 13:52

我在使用web2py的自定义表单时遇到了两个问题:

  • 1) 错误没有被捕获并显示出来。
  • 2) 表单没有提交。

经过验证后,我得到了这些值:

form.accepts(request.vars, session) => False
form.errors => <Storage ()>

现在我有:

控制器

def new():
    form=crud.create(db.i2l_letter)
    print form.errors
    if form.accepts(request.vars, session):
        response.flash='Bitte warten'
    elif form.errors:
        response.flash='Bitte fuellen sie das Formular richtig aus'
    else:
        pass
    return dict(form=form)

视图

{{if form.errors:}}
  Your submitted form contains the following errors:
  <ul>
  {{=form.errors.date_format}}
  {{for fieldname in form.errors:}}
    <li>{{=fieldname}} error: {{=form.errors[fieldname]}}</li>
  {{pass}}
  </ul>
  {{form.errors.clear()}}
{{pass}}
{{=form.custom.begin}}

<table>
<tr>
<td>{{=form.custom.label.date_format}}</td>
<td>{{=form.custom.label.myref}}</td>
<td>{{=form.custom.label.yourref}}</td>
</tr>
<tr>
<td>{{=form.custom.widget.date_format}}</td>
<td>{{=form.custom.widget.myref}}</td>
<td>{{=form.custom.widget.yourref}}</td>
</tr>
</table>
<div>{{=form.custom.submit}}</div>
{{=form.custom.end}}
{{pass}}

那我到底哪里做错了呢?

2 个回答

1

crud.create() 会自动处理表单的提交,所以在调用它之后就不需要再调用 form.accepts() 了。请查看这本书中关于 Crud 的章节,了解更多信息:书的相关部分

1

如果你使用的是web2py 2.0或更高版本,可以试着把你的控制器代码换成下面这个:

def new():
    form=SQLFORM(db.i2l_letter)
    print form.errors
    if form.process().accepted:
        response.flash='Bitte warten'
    elif form.errors:
        response.flash='Bitte fuellen sie das Formular richtig aus'

    return dict(form=form)

撰写回答