1

我有一个功能:

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()

并且'self'是表x_salary,我认为说它并不重要,因为我想在表x_salary的name = Ma_luong时编写一个员工总工资的函数并且错误是

IndexError: list index out of range 

Giolam 的类型是浮动的......我在 openerp 中写了,我认为 'tong+=kq[1]' 行中的错误我该如何解决?谢谢!!

4

1 回答 1

1

使用我的魔法水晶球,我猜这cr.execute是对标准数据库 API 的调用。所以kr.fetchall()将返回一个行元组。但是,您的 SQL 似乎只返回一行。

您可能的意思是tong += kq[0][1],即giolam结果第一行的第二列 ( )。或者,使用kr.fetchone()仅获取一行,然后您可以将其保留为kq[1]. 无论哪种方式,您都应该检查您的 db 调用是否实际返回结果。

于 2011-12-22T17:38:40.800 回答