2016-08-10 4 views
-1

ではありません私はodooのメソッドをのonchange使用してフィールドを更新しようとしている(CR、UID、frozendict(コンテキスト)はTypeError: 'フロート' オブジェクトが反復可能

私の.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 
です。

私は、フィールドを変更して保存している間は、私は、forループからコンテキストを削除した場合

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 

としてエラーが、それは計算のため前の値をとる示しています。

どうすればこの問題を解決できますか?

は、私はフィールドがPYにfloatとして設定されている

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

XMLでのonchangeを使用して関数を呼び出す

'wage': fields.float('Per Hour Wages'), 
'week1': fields.float('Week 1'), 
+1

200行のコードを転記する前に問題を特定できますか? – polku

+0

self.browse(cr、uid、ids、context = context)内のobjのforループ**でエラーが発生しています。** – Uppili

+0

次に、関係のないものはすべて削除してください。あなたは*問題を明確にしたいが、それを希釈しない。 – deceze

答えて

0

これはTypeError: 'float' object is not iterable"は意味WAHTです: - のための

count=7発言for i in count:for i in 7:を意味し、動作しません。 inの後のビットは、数字ではなく繰り返し可能なタイプでなければなりません。これを試してください:

for i in range(count): 

コメントに記載されているように、より明確な答えを得るために問題を特定してください。

+0

を投稿しました.OPがosv.osvを使用しているようです。 browse、オブジェクトの反復可能性を返します。私はそれがforループの問題ではないと思いますが、コンテキストに悪い値を渡してしまいます。 context = contextを削除するとエラーは回避され、osv.osv.browseではデフォルト値はcontext = None –

+1

です。コンテキスト=コンテキストを削除すると、現在の値ではなく、フィールドweek1の前の値が使用されます – Uppili

関連する問題