Diskusi: Memahami Lebih Dalam Apa Itu 'Model' di Odoo
Diposting pada 30 Mar 2026, 06:47
Ditanyakan oleh: Gunawan
Halo rekan-rekan praktisi Odoo sekalian,
Saya Gunawan, seorang staf IT di perusahaan yang saat ini sedang aktif pakai Odoo ERP. Belakangan ini saya lagi coba eksplorasi lebih jauh tentang arsitektur dan pengembangan di Odoo, terutama saat ingin melakukan kustomisasi atau membuat modul baru. Saya sering banget mendengar atau membaca istilah 'Model' ketika berurusan dengan ORM (Object Relational Mapping) atau melihat struktur data di Odoo.
Nah, yang jadi pertanyaan saya, bisa minta pencerahannya lebih detail nggak, sebenarnya 'Model' di Odoo itu definisinya apa ya? Apakah dia itu murni representasi dari tabel di database kita, atau ada lapisan abstraksi atau logika bisnis tertentu di atasnya yang membedakannya?
Saya masih agak bingung dalam membedakan antara 'Model' dengan 'tabel database' secara langsung, dan bagaimana 'Model' ini berinteraksi dengan 'fields', 'records', dan 'views' yang sering kita gunakan saat konfigurasi atau pengembangan. Adakah analogi sederhana atau tips praktis dari rekan-rekan yang sudah berpengalaman untuk memahami konsep 'Model' ini dengan lebih baik?
Terima kasih banyak atas waktu dan bantuannya ya rekan-rekan!
Admin Odoo ForumAdmin & AI Support30 Mar 2026, 06:47
Halo Mas Gunawan,
Wah, pertanyaan yang keren banget nih! Senang sekali Mas Gunawan aktif eksplorasi lebih jauh tentang arsitektur Odoo. Memahami konsep 'Model' ini memang fundamental banget kalau kita mau customisasi atau bikin modul baru. Pasti berguna banget buat posisi IT di perusahaan, mantap!
Saya coba bantu jelaskan ya, Mas. Semoga bisa memberikan pencerahan yang lebih detail.
Secara definisi, di Odoo, sebuah 'Model' itu adalah representasi dari sebuah objek bisnis di sistem kita. Bisa dibilang, Model adalah inti dari setiap fungsionalitas di Odoo. Dia bukan cuma sekadar cerminan langsung dari tabel di database kita, tapi lebih dari itu: Model adalah lapisan abstraksi yang menggabungkan struktur data (apa saja data yang disimpan) dengan logika bisnis (bagaimana data itu berperilaku, aturan validasi, perhitungan, dan interaksi dengan data lain).
Model ini adalah fondasi dari ORM (Object Relational Mapping) Odoo. Artinya, kita berinteraksi dengan data layaknya objek Python, bukan lagi dengan query SQL langsung ke database. Model akan menerjemahkan operasi objek kita menjadi query SQL yang sesuai.
Jadi, apa bedanya dengan 'tabel database'?
Anggap saja gini, Mas:
Tabel database adalah 'wadah' fisik di mana data mentah kita disimpan. Ini adalah struktur kolom dan baris yang murni menyimpan nilai-nilai. Contohnya, tabel `res_partner` akan menyimpan nama, alamat, nomor telepon partner.
Model di Odoo adalah 'desain' atau 'cetak biru' dari objek yang datanya disimpan di tabel database tersebut. Model tidak hanya mendefinisikan kolom (yang kita sebut 'fields' di Odoo), tetapi juga mendefinisikan metode (fungsi Python) yang bisa kita gunakan untuk berinteraksi dengan data tersebut. Misalnya, Model `res.partner` tidak hanya punya field untuk nama dan alamat, tapi juga punya metode untuk mencari partner, memvalidasi input, atau bahkan melakukan komputasi tertentu yang terkait dengan partner.
Singkatnya, setiap Model di Odoo akan berkorespondensi dengan satu tabel database (misalnya, Model `product.template` akan berkorespondensi dengan tabel `product_template` di database). Namun, Model memberikan kemampuan lebih dari sekadar menyimpan data; dia membungkus perilaku dan aturan di atas data tersebut.
Lalu, bagaimana interaksinya dengan 'fields', 'records', dan 'views'?
Fields: Setiap Model mendefinisikan serangkaian 'fields'. Fields ini adalah atribut atau properti dari objek bisnis yang diwakili oleh Model tersebut, dan secara fisik adalah kolom-kolom di tabel database. Misalnya, Model `res.partner` akan memiliki fields seperti `name` (nama partner), `street` (alamat jalan), `email`, `phone`, dll. Setiap field punya tipe datanya (string, integer, boolean, Many2one, One2many) dan properti lain (required, readonly, related, computed).
Records: Ketika kita menyimpan data baru ke dalam sistem, misalnya membuat partner baru, kita sebenarnya sedang membuat sebuah 'record' dari Model `res.partner`. Jadi, record adalah instance individual dari sebuah Model, yang memiliki nilai spesifik untuk setiap field yang didefinisikan oleh Model tersebut. Jika Model adalah cetak birunya, maka record adalah "produk jadi" yang dibuat dari cetak biru itu. Setiap baris di tabel database kita adalah sebuah record.
Views: 'Views' (seperti Form View, Tree View, Kanban View, dll.) adalah cara Odoo menampilkan data yang dikelola oleh sebuah Model kepada pengguna. View ini adalah antarmuka pengguna (UI) kita. Views tidak menyimpan data; mereka hanya menampilkan, memungkinkan input, dan memanipulasi records dari suatu Model. Misalnya, Form View untuk `res.partner` akan menampilkan semua fields yang relevan dari Model `res.partner` dan memungkinkan pengguna untuk melihat atau mengedit nilai-nilai dari suatu record partner.
Untuk analogi sederhana agar lebih mudah dipahami:
Bayangkan 'Model' itu seperti blueprint atau denah lengkap untuk membangun sebuah mobil (misalnya, sebuah Toyota Camry).
Blueprint ini menjelaskan setiap detail: mesinnya harus bagaimana, ukurannya berapa, fitur keamanan apa saja yang harus ada, material apa yang dipakai untuk bodi, dsb. Blueprint ini juga termasuk bagaimana mobil itu harus berfungsi (misalnya, cara mesin hidup, cara rem bekerja).
Setiap spesifikasi kecil di blueprint (seperti "mesin 2.5L", "warna merah", "jok kulit") adalah 'fields' dari Model tersebut.
Ketika sebuah mobil Toyota Camry benar-benar diproduksi dari blueprint ini dan melaju di jalanan, itu adalah sebuah 'record'. Mobil spesifik dengan nomor plat tertentu adalah sebuah record.
Sedangkan 'tabel database' adalah seperti gudang tempat menyimpan daftar semua suku cadang mobil yang tersedia beserta jumlahnya, atau daftar semua warna cat yang ada. Dia hanya menyimpan data mentah.
Lalu, 'Views' itu seperti dashboard mobil yang kita lihat dan gunakan saat mengemudi, atau seperti brosur iklan mobil di dealer. Dashboard menampilkan informasi penting (speedometer, indikator bensin - ini adalah fields), dan memungkinkan kita berinteraksi (menyalakan lampu, menghidupkan AC - ini adalah operasi pada record). Brosur adalah representasi visual yang menarik dari mobil tersebut.
Tips praktis dari saya untuk memahami konsep Model ini lebih baik:
1. Selalu libatkan kode: Saat Mas Gunawan berpikir tentang Model, jangan hanya membayangkan tabel. Bayangkan juga file Python di mana Model itu didefinisikan (misalnya, `models/res_partner.py`). Di situlah semua logika bisnis, validasi, dan relasi didefinisikan.
2. Gunakan Developer Mode: Aktifkan Developer Mode (debug mode) di Odoo Mas Gunawan. Kemudian, pergi ke Technical > Database Structure > Models. Di sana Mas Gunawan bisa melihat daftar semua Model, fields mereka, dan tabel database yang terkait. Ini membantu visualisasi.
3. Eksplorasi kode Odoo: Coba intip source code modul-modul standar Odoo (misalnya, `odoo/addons/base/models/res_partner.py` atau `odoo/addons/product/models/product_template.py`). Mas Gunawan akan melihat bagaimana fields didefinisikan, dan bagaimana metode-metode Python ditulis untuk berinteraksi dengan data tersebut.
Memahami Model dengan baik adalah kunci untuk menjadi pengembang Odoo yang handal, Mas. Jangan ragu bertanya lagi jika ada bagian yang masih kurang jelas ya!
Semangat terus eksplorasinya!