Mengisi Field Pada Dua Objek Berbeda

Filling Fields on Two Different Objects

Odoo image and text block

Mengisi Field Dari Dua Objek Berbeda

Membuat field yang isi nya berubah secara dinamis pada dua model berbeda

 

Assalamu'alaikum Warahmatullahi Wabarakatuh,

        Bismillah... pada kesempatan kali ini sy akan sedikit berbagi pengelaman terkait cara pembuatan field pada odoo yang bisa terisi secara dinamis dari dua model berbeda. semisal pada model product.template yang beberapa field nya misal field responsible yang diubah, field ini diubah pada record tertentu, maka record product.product yang terelasi many2one ke product.template tersebut akan berubah secara dinamis mengikuti value dari yang dirubah, hal ini juga berlaku sebalik nya, jika diubah data dari product.product, maka data di product template juga akan berubah.

        Cara nya adalah dengan membuat field related ke model parent yang ingin dibuat dinamis, dengan syarat field related ini diberi atribut store=True, agar field related ini disimpan di database. Karena fieldrelated secara default dibuat readonly sama dengan True, jadi agar kita bisa edit kita perlu menambahkan atribute readonly=False pada deklarasi field.

        

Misal kita ingin membuat field integer bernama product_numberyang isi nya dinamis dua pada modelproduct.template dan product.product:


class ProductTemplate(models.Model):

        _inherit = 'product.template'

        product_number = fields.Integer(string='Nomor Produk')


lalu kita buat juga inherit ke product.product dan membuat related field ke product.template dengan aturan yang sudah dibahas tadi, karena secara default product.product sudah memiliki relasi field many2one ke product.template bernama product_tmpl_id:


class ProductProduct(models.Model):

        _inherit = 'product.product'

        product_number = fields.Integer(related='product_tmpl_id.product_number', store=True, readonly=False)


lalu kita tinggal meletakannya pada view kedua model tersebut, output nya, ketika field product_number pada product.template diberi value maka field product_number pada product.product juga akan berubah sesuai isian di product.template.


implementasi cara ini bisa digunakan untuk tipe field yang lain misal Char, Monetary, Many2one, bahkan juga bisa One2many dan Many2many asalkan ada field relasi nya.


        Kesimpulannya, untuk bisa mengubah value dari field secara dinamis dari dua model berbeda bisa dilakukan dengan banyak cara, misal override method create yang ke trigger ketika record dibuat lalu assign value nya ke record terkait, atau override method write, atau juga dengan method _onchange. itu semua tergantung situasi dan kondisi yang diperlukan. Sekian untuk kali ini, semoga bermanfaat.

Jazakumullahu Khoiron . . .



.

 

 

Additional

Kita bisa mengubah value field pada model apapun selama ada relasi Many2one atau One2many atau Many2many ke model tersebut.

misal mengubah value standard_price menjadi 20 ribu di product.template dalam fungsi onchange product.product


    self.product_tmpl_id.standard_price = 20000

atau

    self.product_tmpl_id.write({

        'standard_price': 20000

    })