使用vars调用函数时,web2py SQLFORM.factory无法正常工作

时间:2017-10-12 11:14:53

标签: python web2py

我有一个调用函数get_report_date()的菜单项以及变量next_url

(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通过使用report_date制作的表单获取SQLFORM.factory的用户输入,并将其作为var传递给next_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()功能。

1 个答案:

答案 0 :(得分:0)

form.process().acceptedFalse有两个条件:(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所示)来控制表单提交时发生的情况。