我有一个功能:
def tong_thoigian (self,cr,uid,ids,context={}):
obj=self.browse(cr,uid,ids,context=context)[0]
cr.execute('''select name,giolam from x_giolam where name=%s'''%(obj.ma_luong))
kq=cr.fetchall()
tong=0.00000
for i in kq:
tong+=kq[1]
self.write(cr,uid,ids,{'tonggiolam':tong},context=context)
这是表x_giolam:
class x_giolam(osv.osv):
_name = 'x_giolam'
_description = 'Gio Lam'
_columns = {
'name': fields.integer('Lọai',size=64,required="true"),
'giolam' : fields.float('Gio lam',size=64,required="True"),
'time_in': fields.char('Gio vào',size=20),
'time_out' :fields.char('Gio về',size=20),
'congviec' :fields.char('Cong viec',size=50),
}
x_giolam()
而“自我”是表x_salary,我认为这并不重要,因为当表x_salary的名称= Ma_luong时,我想编写一个用于职员总薪水的函数
错误是
IndexError: list index out of range
乔拉姆的类型是浮动的...
我在openerp中写
而且我认为'tong + = kq [1]'行中有错误
我该如何解决?
谢谢!!
最佳答案
使用我的魔幻水晶球,我猜测cr.execute
是对标准数据库API的调用。因此,kr.fetchall()
将返回一个行的元组。但是,看来您的SQL仅返回单行。
您可能指的是tong += kq[0][1]
,即结果第一行的第二列(giolam
)。或者,使用kr.fetchone()
仅获得一行,然后可以将其保留为kq[1]
。无论哪种方式,都应检查数据库调用是否确实返回了结果。