Ada beberapa cara inheritance atau pewarisan pada Odoo. Inheritance pada Odoo tidak hanya ada pada sisi Python programming, tapi juga ada pada sisi XML view.
Odoo inheritance pada model
Gambar diatas adalah penjelasan secara visual dari inheritance pada model. Sekarang saya akan jelaskan secara rinci, maksud dari gambar diatas.
Anggaplah kita mempunyai sebuah model awal seperti ini:
Contoh _inherit
Maka implikasinya adalah, pada tabel model1 di database akan ada penambahan field yaitu field_baru_1 & field_baru_2. Selain itu method pada class Model1 (sebagai contoh method_lama()) bisa diturunkan (override).
Contoh _inherit dengan pendeklarasian _name baru
Maka implikasinya adalah, kondisi tabel model1 di database tetap tidak berubah. Sistem membuat tabel baru bernama model2, dengan field column seperti pada tabel model1 dan ditambahkan dengan field baru yang dideklarasikan pada class Model2. Class Model2 tetap bisa melakukan override pada method class Model1.
Contoh _inherits pada fields.Many2one() dengan pendeklarasian _name baru
Maka implikasinya adalah, kondisi tabel model1 di database tetap tidak berubah. Sistem membuat tabel baru bernama model2, dengan field column seperti pada tabel model1 dan ditambahkan dengan field baru yang dideklarasikan pada class Model2. Class Model2 tetap bisa melakukan override pada method class Model1.
Bedanya dengan contoh-2 adalah setiap create record baru pada model2, maka akan create record baru juga pada model1. Begitu juga jika update data record pada model2 akan berimbas juga pada model1, begitu pula sebaliknya jika update pada model1 akan berimbas juga pada model2.
Odoo inheritance pada view
Misalkan kita ingin membuat inheritance pada form model1. Berikut contoh kode untuk inheritance pada view.
Ada beberapa tipe position yang bisa digunakan yaitu:
- inside: elemen baru dimasukkan (append) ke dalam elemen acuan.
- replace: elemen baru untuk menggantikan elemen acuan. Jika tidak ada elemen baru, maka berarti menghapus elemen acuan saja.
- before: elemen baru berada di posisi sebelum elemen acuan.
- after: elemen baru berada di posisi setelah elemen acuan.
- attributes: untuk merubah attribute dari elemen acuan.
Baca juga: Cara memanggil fungsi di model dari view XML.