コンテンツへスキップ
メニュー
この質問にフラグが付けられました
1 返信
4607 ビュー

I'm trying to update One2many field inside onchange method.

As documentation says I'm using update method, and not standard CRUD methods like create.

I have this piece of code:

class HrExpenseSheet(models.Model):
_inherit = "hr.expense.sheet"


@api.onchange('employee_id')
def _update_expense_ids(self):

# define variables ...

values = {
'product_id': product_id,
'name': name,
'product_uom_id': product_uom_id,
'unit_amount': unit_amount,
'quantity': quantity,
'total_amount': total_amount
}

self.update({'expense_line_ids':[(0, 0, values)]})

It almost works. I get my record added to the table but after that whole table just breaks... When this code executes couple things happen:

I'm not able to save the document because supposedly required unit_amount is not filled in - it clearly should be
When I'm trying to edit that particular line I'm not able to because it takes me to a completely new record without my data filled in (but data is present on the table view)
I'm not able to add new row because when I click the button I get error psycopg2.errors.InvalidTextRepresentation: invalid input syntax for type integer: "virtual_2509" LINE 1: ...mpany_id" = 1)) AND (("hr_expense"."id" not in ('virtual_2...

What the hell is happening. I've had the same code running on version 8.0 without problem but this does not work on 13.0.

アバター
破棄
最善の回答

Hi,

Try update your code like below.

    @api.onchange('employee_id')
def _update_expense_ids(self):
# define variables ...
values = [{
'product_id': product_id,
'name': name,
'product_uom_id': product_uom_id,
'unit_amount': unit_amount,
'quantity': quantity,
'total_amount': total_amount
}]
self.update({'expense_line_ids': [(6, 0, values)]})

Hope it helps

アバター
破棄
著作者

Does not work. I get an error

File "/usr/lib/python3/dist-packages/odoo/api.py", line 745, in get

value = self._data[field][record._ids[0]]

TypeError: unhashable type: 'dict'

関連投稿 返信 ビュー 活動
0
7月 22
3683
1
1月 21
3401
0
12月 21
3110
2
12月 21
6053
1
1月 21
5162