2017-10-12 85 views
0

我有一個菜單項調用函數get_report_date()以及變量next_urlweb2py當用函數調用函數時,SQLFORM.factory不起作用

(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_date通過與SQLFORM.factory做一個表單來獲取用戶輸入的report_date,並把它作爲一個varnext_url

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

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

但形式從未打開過,並且功能直接進入else選項和閃爍Incorrect Date:None

我不明白我在哪裏犯錯。有人可以指出我的錯誤,並建議如何獲得功能?我需要爲許多報告提供get_report_date()功能。

回答

0

form.process().accepted有兩種情況:False:(1)空表單首次發送給瀏覽器(即未提交);(2)表單已提交但未通過驗證。您的代碼僅假設第二種情況,並且未能爲第一種情況提供路徑。這應該不是看起來像:

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) 

注意,作爲一種替代你的條件邏輯,你可以利用的nextonfailure參數(如記錄here)控制在表單提交會發生什麼。

+0

謝謝@Anthony !!!有效.. –