1

当我尝试运行 Web2Py 的代码时出现错误。

基本上我们必须编写一个函数来查询数据库并显示可用的航班。

函数定义如下:

def searchFlights():
    return dict()

def show():
    receivedFlights = request.vars.originCity+','+request.vars.destCity+','+request.vars.type+','+request.vars.deptDate+','+request.vars.arrivalDate+','+request.vars.vlassType+','+request.vars.noOfAdults+','+request.vars.noOfChildren+','+request.vars.noOfInfants
    return dict(txt1=recievedflights, flights=db().select(db.Flight.request.originCity+','+request.vars.destCity+','+request.vars.type+','+request.vars.deptDate+','+request.vars.arrivalDate+','+request.vars.classType+','+request.vars.noOfAdults+','+request.vars.noOfChildren+','+request.vars.noOfInfants)) 

我们现在得到的错误是:

  **File "K:/wdd-softw/web2py/applications/Assignment/controllers/default.py", line 106, in show
    receivedFlights = request.vars.originCity+','+request.vars.destCity+','+request.vars.type+','+request.vars.deptDate+','+request.vars.arrivalDate+','+request.vars.vlassType+','+request.vars.noOfAdults+','+request.vars.noOfChildren+','+request.vars.noOfInfants

类型错误:+ 不支持的操作数类型:“NoneType”和“str”**

4

2 回答 2

2

第一个问题是,当第一次加载带有表单的页面时,没有提交任何内容,所以request.vars是空的,因此每个都request.vars.some_var返回 None。相反,您可以执行以下操作:

receivedFlights = ', '.join(request.vars.values()) if request.vars else 'Empty'

您的数据库选择也会遇到同样的问题——您应该只在 request.vars 存在时运行查询。此外,您的查询不正确 - 您不能简单地将所有值连接成一个字符串并将其放在select(). 我建议您阅读有关DAL的章节以了解正确的查询语法。它应该看起来更像:

db((db.Flight.originCity == request.vars.originCity) &
   (db.Flight.destCity == request.vars.destCity) &
   ...).select()

最后,您可以按照此处的建议简化查询构造:

query = reduce(lambda a, b: (a & b),
    (db.mytable[v] == request.vars[v] for v in request.vars if v != None))
于 2013-01-15T16:13:06.507 回答
0

使用 ...+str(request.vars.noOfAdults)+... 将数字字段转换为字符串。

于 2017-02-24T13:58:32.880 回答