Bỏ qua để đến Nội dung
Menu
Câu hỏi này đã bị gắn cờ
1 Trả lời
10026 Lượt xem

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

Ảnh đại diện
Huỷ bỏ
Câu trả lời hay nhất

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.

Ảnh đại diện
Huỷ bỏ
Tác giả

Thanks a lot.Its working

You're welcome!

Bài viết liên quan Trả lời Lượt xem Hoạt động
1
thg 10 17
42848
1
thg 3 15
5068
2
thg 2 20
17414
0
thg 6 15
7315
2
thg 3 15
7302