Skip to Content
Menu
This question has been flagged
1 Reply
8970 Views

I created one2many  in the hr.employee object like this

hr_leave_history_ids = fields.One2many('hr.leave.history','employee_id','Paid Leave History',compute='_compute_o2m_field')

in method _compute_o2m_field updating the field values like this self.hr_leave_history_ids = [(0,0,values)]

here values is a dictionary consists of 'hr.leave.history' object fields and values 
but its not updating in the Hr form and not even creating the records in 'hr.leave.history' table

plz help me out

Avatar
Discard
Best Answer

Wrong assignment 

self.hr_leave_history_ids = [(0,0,values)]
here the field hr_leave_history_ids is a recordset of 'hr.leave.history' object (as it's relational field in v8 style), but you assigning a raw list to it.
If you're adding relation to a single object, then it should be like:

self.hr_leave_history_ids  |=  self.env['hr.leave.history'].create(values)

as your field type is One2many, potentially there may be need to add multiple records, in such a case you can collect them into your field with the same "|"  operator: 

for values in values_list:
    self.hr_leave_history_ids |= self.env['hr.leave.history'].create(values)

note the "|" in "|=" operator, it's one of the allowed "Set operations". you can use other set operations as well, if applicable to your case (see documentation here).  Here is relevant quote:

  • set1 | set2 returns the union of the two recordsets, a new recordset containing all records present in either source

NOTE:
create() method used as an example here, however it does not matter how you acquire a recordset you assign to relational field in it's  compute function, either create(), search() or browse() or whatever method yields recordset required may work.

Avatar
Discard
Author

Thanks a lot.Its working

You're welcome!

Related Posts Replies Views Activity
1
Oct 17
40545
1
Mar 15
4070
2
Feb 20
16225
0
Jun 15
6403
2
Mar 15
6157