Để thao tác CRUD dữ liệu cho các loại field One2many và Many2many trên Odoo thì Odoo định nghĩa các flags như sau:
Nguyên bản tiếng Anh
-
(0, 0, { values }) link to a new record that needs to be created with the given values dictionary
-
(1, ID, { values }) update the linked record with id = ID (write values on it)
-
(2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
-
(3, ID) cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
-
(4, ID) link to existing record with id = ID (adds a relationship)
-
(5) unlink all (like using (3, ID) for all linked records)
-
(6, 0, [IDs]) replace the list of linked IDs (like using (5) then (4, ID) for each ID in the list of IDs)
Giải thích tiếng Việt
- (0, 0, { values }) sẽ tạo mới 1 record với dữ liệu là values kiểu dictionary và liên kết với bảng hiện tại
- (1, ID, { values }) update 1 record đã liên kết có id = ID với dữ liệu update là values kiểu dictionary
- (2, ID) Nó sẽ gọi hàng Unlink trên bảng liên kết và xóa cả liên kết lẫn đối tượng liên kết
- (3, ID) Nó chỉ xóa liên kết chứ ko xóa đối tượng liên kết.
- (4, ID) Liên kết tới 1 bản ghi có id = ID
- (5) Xóa bỏ toàn bộ các record đã liên kết và liên kết giữa chúng vơi bảng hiện tại.
- (6, 0, [IDs]) Thay thế toàn bộ danh sách IDs liên kết.
VD: Insert dữ liệu
@api.multi def Create_One2many_method(self): search_var = self.search([('staff_age', '=', 0)]) search_var.write({ 'stud_ids': [(0, 0, { 'reg_no': 4200, 'stud_email': '[email protected]', 'stud_phone': '9788987689', })] })
Ngoài ra với Odoo 15, 16 bạn có thê sử dụng thêm Class Command:
- Command.create(vals) | (0, 0, { values }) link to a new record that needs to be created with the given values dictionary
- Command.update(ID, vals) | (1, ID, { values }) update the linked record with id = ID (write *values* on it)
- Command.delete(ID) | (2, ID) remove and delete the linked record with id = ID (calls unlink on ID, that will delete the object completely, and the link to it as well)
- Command.unlink(ID) | (3, ID) cut the link to the linked record with id = ID (delete the relationship between the two objects but does not delete the target object itself)
- Command.link(ID) | (4, ID) link to existing record with id = ID (adds a relationship)
- Command.clear() | (5) unlink all (like using (3,ID) for all linked records)
- Command.set([IDs]) | (6, 0, [IDs]) replace the list of linked IDs (like using (5) then (4,ID) for each ID in the list of IDs)
Nguồn: vinasupport.com