Python (cr、uid、frozendict(上下文)类型错误:';float';对象不可编辑

Python (cr、uid、frozendict(上下文)类型错误:';float';对象不可编辑,python,typeerror,Python,Typeerror,我正在尝试使用odoo中的onchange方法更新一个字段 我的.py代码是 class hr_contract(osv.osv): _name = 'hr.contract' _description = 'Contract' def _wage(self, cr, uid, ids,context=None): res = {} pay_slip = 0 pay_slip1 = 0 for obj in self.brow

我正在尝试使用odoo中的onchange方法更新一个字段

我的.py代码是

class hr_contract(osv.osv):
_name = 'hr.contract'
_description = 'Contract'


def _wage(self, cr, uid, ids,context=None):
        res = {}
        pay_slip = 0
        pay_slip1 = 0

        for obj in self.browse(cr, uid, ids, context=context):
            s1 = ("""select schedule_pay from hr_contract where employee_id=%s""" % (obj.employee_id.id))
            cr.execute(s1)
            l1 = cr.fetchone()
            value10 = l1[0]
            if value10 == 'bi-weekly':
                s4 = (
                    """select salary from hr_contract where employee_id=%s """ % (
                        obj.employee_id.id))
                cr.execute(s4)
                l4 = cr.fetchone()
                salary = l4[0]
                # **************************************************************#
                ######### Week1  #############
                s5 = ("""select week1 from hr_contract where employee_id=%s """ % (
                    obj.employee_id.id))
                cr.execute(s5)
                l5 = cr.fetchone()
                week1 = l5[0]
                print "week1", week1
                if week1 != None:
                    if week1 > 48.00:
                        weeked1 = week1 - 48.00
                        total_amt = salary * (weeked1 * 1.5)
                        total_pay = 48.00 * salary
                        pay_slip = total_amt + total_pay
                        pay_slip1 += pay_slip
                        print "payslip..", pay_slip
                        cr.execute(""" update hr_contract set week1=%s where employee_id=%s""" % (
                            week1, obj.employee_id.id))
                    else:
                        pay_slip = week1 * salary
                        pay_slip1 += pay_slip
                        print "payslip..", pay_slip1
当我更改字段并将其保存时,错误显示为

File "/home/rck/Desktop/odoo/openerp/api.py", line 769, in __new__
    self.cr, self.uid, self.context = self.args = (cr, uid, frozendict(context))
TypeError: 'float' object is not iterable
如果我从for循环中删除上下文,则计算将采用上一个值

我怎样才能解决这个问题

我使用xml中的onchange调用该函数

<field name="week1" on_change="_wage(week1)"/>

这就是为什么
TypeError:“float”对象不可编辑“
表示:-

count=7
对于say then
对于i in count:
意味着
对于i in 7:
,这将不起作用。in中
后面的位应该是可编辑类型,而不是数字。请尝试以下操作:

for i in range(count):

如注释中所述,隔离您的问题以获得更清晰的答案。

在发布200行代码之前,您能否隔离问题?错误位于self.browse(cr、uid、ids、context=context)中obj的for循环中:那么请删除任何不相关的内容。您想澄清问题,而不是淡化问题。我编辑了我的问题。您可以将调用_wage的代码片段发布到哪里吗?看起来您正在向上下文参数传递一个float。请记住,“context=None”"在函数声明中,没有设置该变量,而是设置如果不提供该变量,该变量将是什么。看起来OP使用的是osv.osv.browse,它返回一个对象的iterable。我认为直接使用for循环不是问题,而是向context传递一个坏值。删除context=context可以避免错误,并且osv.osv.browse默认值为context=none我也尝试了它。当我删除context=context时,它采用字段week1的上一个值,而不是当前值
for i in range(count):