ошибка при получении данных - PullRequest
1 голос
/ 22 декабря 2011

у меня есть функция:

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, я думаю, что не важно об этом говорить, потому что я хочу написать функцию для суммы заработной платы персонала, когда name = Ma_luong таблицы x_salary и ошибка

IndexError: list index out of range 

тип Giolam является плавающим ... и я пишу в openerp и я думаю, что ошибка в строке «Тонг + = KQ [1]» Как я могу это исправить? спасибо !!

1 Ответ

1 голос
/ 22 декабря 2011

Используя мой волшебный хрустальный шар, я предполагаю, что cr.execute - это вызов стандартного API базы данных.Так что kr.fetchall() вернет кортеж строк.Однако, похоже, что ваш SQL возвращает только одну строку.

Вы, вероятно, имеете в виду tong += kq[0][1], то есть второй столбец (giolam) первой строки результата.В качестве альтернативы, используйте kr.fetchone(), чтобы получить только один ряд, тогда вы можете оставить его как kq[1].В любом случае, вы должны проверить, что ваш вызов базы данных действительно возвращает результаты.

...