0

私はweb2pyでカスタムフォームを扱っていて、2つの問題に直面しました

  • 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}}

だから私は間違っているのですか?

4

2 に答える 2

1

crud.create()はフォーム処理を自動的に処理するため、それform.accepts()以降は呼び出さないでください。Crudの本のセクションを読んでください。

于 2013-01-28T00:50:04.367 に答える
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)
于 2013-01-28T00:01:58.990 に答える