This question has been flagged
1 Reply
3163 Views

I got the following error message

TypeError: write() takes exactly 2 arguments (5 given) 

due to the following code

    def post(self,cr,uid,ids,context=None):
        o = self.browse(cr,uid,ids[0])
        budget_obj = self.pool.get('budget.expense').browse(cr,uid,o.budget_id.id)
        budget_line = self.pool.get('budget.expense.lines')
        for line in o.budget_transaction_line:
            for item in budget_obj.budget_expense_line:
                if line.item_id.id == item.item_id.id:
                    if line.tran_type in ('salary','expense'):           
                        if item.planned_amount - item.practical_amount - line.amount>=0: 
                            b_line = budget_line.browse(cr,uid,item.id)
                            vals = { 'practical_amount':item.practical_amount + line.amount,  }
                            b_line.write(cr,uid,[item.id],vals)

Don't care about all the method's lines, the problem is in the last bold line

Does anyone have an idea to resolve this error ?

Avatar
Discard
Best Answer

Hello,

Please remove "cr, uid, [item.id] from last line, just simply keep as follows,

b_line.write(vals)

Reason : 

At this line : b_line = budget_line.browse(cr,uid,item.id) those 3 arguments are already loaded. So there is no need to provide them again at last line.

Warning : 
If "vals" dict contains the key which is not available as a field in "budget.expense.lines" model, then system will raise an error. ( This is only for knowledge purpose ).

If instead of this line b_line.write(cr,uid,[item.id],vals) you will write like self.pool.get("budget.expense.lines").write(cr,uid,[item.id],vals) then system will not raise an error. ( in case of if "vals" dict contains the key which is not available as a field in "budget.expense.lines" model )

Avatar
Discard
Author

thx for help. I tried the line "b_line.write(vals)" only, still need to try the other part of your solution