Panduan Belajar Odoo ORM (Object-Relational Mapping) untuk Developer Pemula
Odoo Technical Training
22 July, 2026 by
PT. Jidoka System Indonesia, Tatang Iwan Suryana


Panduan Belajar Odoo ORM (Object-Relational Mapping) untuk Developer Pemula

Dalam dunia software development, berinteraksi langsung dengan database menggunakan perintah SQL (Structured Query Language) secara manual kerap memakan waktu dan rentan terhadap kesalahan (error). Bagi Anda yang sedang mendalami Odoo Python Development, framework Odoo telah menyediakan sebuah layer abstraksi ampuh yang disebut ORM (Object-Relational Mapping).

Melalui ORM, developer dapat mengelola, memanipulasi, dan memproses data pada database PostgreSQL tanpa perlu menulis kueri SQL mentah secara terus-menerus. Artikel ini akan membimbing Anda memahami konsep dasar dan metode-metode krusial saat belajar Odoo ORM.

Apa Itu Odoo ORM?

ORM (Object-Relational Mapping) adalah teknik pemrograman yang menghubungkan objek dalam kode Python dengan tabel-tabel di dalam database PostgreSQL.

Dalam arsitektur Odoo:

  • Model Odoo (Python Class) merepresentasikan Tabel Database.

  • Field / Atribut merepresentasikan Kolom Tabel.

  • Record / Object merepresentasikan Baris Data (Row).

Dengan memanfaatkan ORM, kode Python yang Anda buat menjadi jauh lebih bersih (clean code), aman dari ancaman SQL Injection, serta lebih mudah dipelihara (maintainable).

5 Metode Utama Odoo ORM yang Wajib Diketahui

Saat Anda membangun modul kustom (custom module), terdapat lima basic methods yang paling sering digunakan untuk melakukan operasi CRUD (Create, Read, Update, Delete):

1. search() – Mencari Data Berdasarkan Kriteria

Metode search() digunakan untuk mencari record data berdasarkan filter kriteria tertentu (domain).

# Mencari semua pelanggan (res.partner) yang berada di Indonesia

partners = self.env['res.partner'].search([('country_id.code', '=', 'ID')])

2. browse() – Mengambil Record Berdasarkan ID

Jika Anda sudah mengetahui nilai ID tertentu dari tabel database, gunakan browse() untuk mendapatkan recordset.

# Mengambil record partner dengan ID 12

partner = self.env['res.partner'].browse(12)

3. create() – Menambahkan Record Baru

Metode create() berfungsi memasukkan baris data baru ke dalam database.

# Membuat record partner baru

new_partner = self.env['res.partner'].create({

    'name': 'PT Mitra Digital Indonesia',

    'email': 'contact@mitradigital.com',

    'is_company': True,

})

4. write() – Memperbarui Data (Update)

Untuk mengubah atau memperbarui informasi pada record yang sudah ada, gunakan write().

# Memperbarui alamat email dari record partner

partner.write({

    'email': 'info@mitradigital.com'

})

5. unlink() – Menghapus Data

Metode unlink() digunakan untuk menghapus satu atau beberapa baris data dari database.

# Menghapus record partner

partner.unlink()

Studi Kasus Sederhana: Menghitung Total Penjualan Pelanggan

Berikut adalah contoh penerapan logika bisnis sederhana dalam Odoo Python Development menggunakan kueri ORM:

from odoo import models, fields, api


class ResPartner(models.Model):

    _inherit = 'res.partner'


    total_invoiced_amount = fields.Float(

        string='Total Invoiced'

        compute='_compute_total_invoiced'

    )


    @api.depends('invoice_ids')

    def _compute_total_invoiced(self):

        for partner in self:

            # Menggunakan ORM search untuk memfilter faktur yang sudah dibayar

            paid_invoices = self.env['account.move'].search([

                ('partner_id', '=', partner.id),

                ('move_type', '=', 'out_invoice'),

                ('payment_state', '=', 'paid')

            ])

            

            # Menghitung total nilai faktur

            partner.total_invoiced_amount = sum(paid_invoices.mapped('amount_total'))


from odoo import models, fields, api


class ResPartner(models.Model):

    _inherit = 'res.partner'


    total_invoiced_amount = fields.Float(

        string='Total Invoiced'

        compute='_compute_total_invoiced'

    )


    @api.depends('invoice_ids')

    def _compute_total_invoiced(self):

        for partner in self:

            # Menggunakan ORM search untuk memfilter faktur yang sudah dibayar

            paid_invoices = self.env['account.move'].search([

                ('partner_id', '=', partner.id),

                ('move_type', '=', 'out_invoice'),

                ('payment_state', '=', 'paid')

            ])

            

            # Menghitung total nilai faktur

            partner.total_invoiced_amount = sum(paid_invoices.mapped('amount_total'))



Langkah Selanjutnya dalam Menguasai Odoo Development

Memahami ORM adalah fondasi dasar dari pengembangan modul Odoo. Namun, untuk menjadi seorang full-stack ERP developer yang siap menangani proyek skala industri, Anda juga perlu menguasai kustomisasi tampilan (XML & OWL), integrasi API, serta optimasi database PostgreSQL.

Rekomendasi Praktis:
Bagi Anda yang ingin mempercepat proses belajar dengan kurikulum terarah dan studi kasus riil perusahaan, Anda dapat mengikuti program Odoo Technical Training dari Jidoka System. Pelatihan ini dirancang komprehensif mulai dari tingkat fundamentals hingga kustomisasi tingkat lanjut.

Belajar Odoo Technical

Menguasai Odoo ORM akan membuat proses pengembangan modul ERP menjadi jauh lebih cepat dan efisien. Memahami bagaimana cara kerja search, create, write, dan unlink adalah modal utama sebelum Anda melangkah ke tahap pembuatan logika bisnis yang kompleks.

Ingin mengasah keahlian technical tim IT perusahaan Anda secara langsung melalui studi kasus nyata?

PT. Jidoka System Indonesia, Tatang Iwan Suryana
22 July, 2026
Share this post
Archive