2017-10-12 4 views
0

私は、関数get_report_date()を呼び出すメニュー項目と変数next_urlを持っています。web2py SQLFORM.factoryがvarsで呼び出されたときに機能しません

(T('Return Register'), False, '#', [(T('Daily List'), False, URL('default', 'get_report_date', vars=dict(next_url='returns_daily_list')), []), 
(T('Full Register'), False, URL('default', 'returns_register'), []), 

私は機能get_report_dateSQLFORM.factoryで作られたフォームでreport_dateためのユーザー入力を取得し、next_urlからvarようにそれを渡したいです。

{{extend 'layout.html'}} 
{{=form}} 

をしかし、フォームが開かれることはありません、と関数が直接elseオプションと点滅Incorrect Date:Noneに行く:

def get_report_date(): 
    report_date = request.now 
    session.flash = 'I am here' 
    next_url = request.vars.next_url 
    form = SQLFORM.factory(Field('report_date', 'date', requires=IS_NOT_EMPTY())) 

    if form.process().accepted: 
     report_date = form.vars.report_date 
      redirect(URL('%s' % next_url, vars=dict(report_date=report_date))) 
    else: 
     session.flash = T('Incorrect Date: %s' % form.vars.report_date) 
     redirect(URL('index_n')) 

私は以下のように最小限のコードとの対応default/get_report_date.htmlを持っています。

私は誤っている箇所を理解できません。誰かが私の間違いを指摘し、その機能を手に入れる方法をアドバイスできますか?多くのレポートでは、get_report_date()機能が必要になります。

答えて

0

form.process().acceptedFalseとなる条件は2つあります。(1)空のフォームが最初にブラウザに送信された(つまり、送信されていない)、(2)フォームが送信されたが検証に失敗したとき。あなたのコードは、2番目のケースのみを想定しており、最初のケースのパスを指定することはできません。フォームの送信時に何が起こるかを制御する(hereを文書化されているように)あなたの条件ロジックの代替として、あなたはnextonfailure引数を利用することができ、

if form.process().accepted: 
     report_date = form.vars.report_date 
     redirect(URL('%s' % next_url, vars=dict(report_date=report_date))) 
    elif form.errors: 
     session.flash = T('Incorrect Date: %s' % form.vars.report_date) 
     redirect(URL('index_n')) 

    return dict(form=form) 

注:これは、代わりのようなものになるはずです。

+0

ありがとう@Anthony !!!出来た.. –

関連する問題