2017-10-12 126 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 !!!有效.. –