Inheritance atau pewarisan dalam Odoo adalah mekanisme yang memungkinkan pengembang untuk memperluas atau memodifikasi model yang sudah ada tanpa mengubah struktur dasarnya. Odoo menyediakan tiga jenis inheritance utama:
- Classical Inheritance (Pewarisan Klasik)
- Extension Inheritance (Pewarisan Ekstensi)
- Delegation Inheritance (Pewarisan Delegasi)
Mari kita bahas satu per satu.
1. Classical Inheritance (Pewarisan Klasik)
Classical inheritance di Odoo mirip dengan konsep pewarisan dalam bahasa pemrograman berorientasi objek. Dalam metode ini, model baru dibuat dengan mewarisi model yang sudah ada, memungkinkan penggunaan ulang metode dan atributnya.
Contoh Classical Inheritance
from odoo import models, fields
class ResPartnerInherited(models.Model):
_inherit = 'res.partner'
partner_code = fields.Char(string='Partner Code')
Pada contoh di atas, model res.partner
diwarisi, dan field baru partner_code
ditambahkan tanpa mengubah definisi model aslinya.
2. Extension Inheritance (Pewarisan Ekstensi)
Extension inheritance digunakan ketika kita ingin menambahkan atau memodifikasi field dan metode dari model yang sudah ada tanpa mendefinisikan model baru. Ini dilakukan dengan menggunakan _inherit
tanpa mendeklarasikan _name
.
Contoh Extension Inheritance
from odoo import models, fields
class ResPartnerExtended(models.Model):
_inherit = 'res.partner'
is_verified = fields.Boolean(string='Verified')
def verify_partner(self):
for record in self:
record.is_verified = True
Di sini, field is_verified
dan metode verify_partner
ditambahkan ke model res.partner
tanpa mengubah struktur model aslinya.
3. Delegation Inheritance (Pewarisan Delegasi)
Delegation inheritance digunakan ketika kita ingin membuat hubungan antara dua model tanpa menggabungkan field atau metode mereka. Ini dilakukan dengan menggunakan field Many2one
ke model yang diwarisi.
Contoh Delegation Inheritance
from odoo import models, fields
class CompanyBranch(models.Model):
_name = 'company.branch'
_inherits = {'res.partner': 'partner_id'}
partner_id = fields.Many2one('res.partner', required=True, ondelete='cascade')
branch_code = fields.Char(string='Branch Code')
Pada contoh di atas, model company.branch
mewarisi res.partner
melalui field partner_id
. Dengan demikian, semua field dan metode dari res.partner
dapat diakses di company.branch
, tetapi tabel database tetap terpisah.
Kapan Menggunakan Setiap Jenis Inheritance?
- Classical Inheritance: Digunakan jika ingin membuat model baru yang sepenuhnya mewarisi model lain.
- Extension Inheritance: Cocok untuk menambahkan atau mengubah field/metode pada model yang sudah ada.
- Delegation Inheritance: Berguna jika ingin membuat relasi antara model tanpa menggabungkan field mereka.
Kesimpulan
Inheritance dalam Odoo adalah fitur yang sangat fleksibel yang memungkinkan pengembang untuk memperluas dan menyesuaikan fungsionalitas aplikasi tanpa harus mengubah kode inti Odoo. Dengan memahami perbedaan antara tiga jenis inheritance ini, pengembang dapat mengoptimalkan struktur aplikasi mereka sesuai dengan kebutuhan bisnis.