Computed dan related fields di Odoo memungkinkan pengembang untuk menghitung nilai field secara dinamis berdasarkan field lain. Field ini tidak disimpan dalam database kecuali secara eksplisit ditentukan. Odoo menyediakan mekanisme yang kuat untuk mendefinisikan dan menggunakan computed dan related fields secara efisien.
1. Computed Fields
Computed fields adalah field yang nilainya dihitung menggunakan metode tertentu. Nilai ini tidak langsung disimpan dalam database kecuali store=True
diatur.
Mendefinisikan Computed Field
from odoo import models, fields, api
class ProductTemplate(models.Model):
_inherit = 'product.template'
total_price = fields.Float(compute='_compute_total_price', store=True)
unit_price = fields.Float()
quantity = fields.Integer()
@api.depends('unit_price', 'quantity')
def _compute_total_price(self):
for record in self:
record.total_price = record.unit_price * record.quantity
Penjelasan:
- Parameter
compute
menghubungkan field ke metode_compute_total_price
. - Dekorator
@api.depends
memastikan field dihitung ulang ketikaunit_price
atauquantity
berubah. - Menetapkan
store=True
membuat computed field disimpan dalam database, sehingga dapat dicari dan meningkatkan kinerja.
2. Related Fields
Related fields memungkinkan suatu model mengakses field dari model lain tanpa menduplikasi data. Field ini berguna untuk menampilkan informasi dari model lain.
Mendefinisikan Related Field
from odoo import models, fields
class SaleOrder(models.Model):
_inherit = 'sale.order'
partner_email = fields.Char(related='partner_id.email', store=True)
Penjelasan:
- Parameter
related
menghubungkan field kepartner_id.email
. - Menetapkan
store=True
membuat field disimpan dalam database untuk meningkatkan kinerja query.
3. Kapan Menggunakan Computed vs Related Fields?
- Gunakan computed fields ketika nilai harus dihitung dari beberapa field atau membutuhkan logika khusus.
- Gunakan related fields ketika hanya merujuk ke field dari model lain tanpa perhitungan tambahan.
4. Best Practices
- Selalu gunakan
@api.depends
dalam computed fields untuk memastikan perhitungan ulang yang benar. - Atur
store=True
untuk computed fields yang perlu dicari atau difilter. - Gunakan related fields untuk referensi langsung agar tidak menduplikasi data yang tidak perlu.
Kesimpulan
Computed dan related fields di Odoo menyediakan cara yang kuat untuk mengelola data dinamis dan terkait secara efisien. Memahami kapan dan bagaimana menggunakannya membantu dalam mengoptimalkan kinerja aplikasi dan kemudahan pemeliharaan.