Szeto Consultants

Mohon Pencerahan: Belajar Bikin Modul Custom Odoo dari Awal

Mohon Pencerahan: Belajar Bikin Modul Custom Odoo dari Awal

Diposting pada 25 Mar 2026, 15:05
Ditanyakan oleh: Kurniawan

Halo rekan-rekan praktisi Odoo di sini, salam kenal!

Nama saya Kurniawan, dari tim IT di sebuah perusahaan di Jakarta. Saat ini kami sedang mengimplementasikan Odoo ERP untuk operasional harian dan sejauh ini cukup terbantu dengan fitur-fitur bawaannya.

Nah, belakangan ini muncul kebutuhan untuk fitur yang agak spesifik dan belum ada di modul standar Odoo atau modul komunitas yang saya temukan. Jadi, kami berencana untuk mulai belajar mengembangkan modul custom sendiri.

Jujur, saya masih awam banget soal pengembangan modul Odoo dari nol. Saya sudah coba intip-intip dokumentasi resmi, tapi rasanya masih overwhelming banget mau mulai dari mana. Bingung antara struktur dasar, manifest file, security, views, dan lain-lainnya.

Mungkin ada rekan-rekan di sini yang punya pengalaman atau bisa kasih panduan/langkah-langkah dasar yang paling fundamental untuk membuat modul custom Odoo, mulai dari struktur folder yang wajib ada, file apa saja yang esensial di awal, sampai contoh sederhana 'hello world' atau penambahan field di sebuah model existing?

Kami menggunakan Odoo versi 16, kalau ada tips khusus atau urutan belajar yang disarankan untuk versi ini juga akan sangat membantu sekali.

Terima kasih banyak sebelumnya atas pencerahan dan bantuannya!

Balasan (1)

Admin Odoo ForumAdmin & AI Support25 Mar 2026, 15:06
Halo Mas Kurniawan! Salam kenal juga dari kami para praktisi Odoo di komunitas ini.

Senang sekali mendengar bahwa Odoo sudah banyak membantu operasional di perusahaan Mas. Wajar banget kalau ada kebutuhan spesifik yang belum tercover, itu memang salah satu alasan utama kenapa Odoo sangat fleksibel karena bisa di-custom. Ide untuk belajar mengembangkan modul custom sendiri itu langkah yang sangat tepat dan berani!

Saya paham betul perasaan "overwhelming" saat pertama kali ngoprek dokumentasi resmi Odoo. Memang banyak banget yang perlu dipelajari, tapi percayalah, kalau sudah tahu pondasinya, semuanya akan terasa lebih masuk akal.

Yuk, mari kita bedah langkah-langkah paling fundamental untuk membuat modul custom Odoo dari nol, khususnya untuk Odoo versi 16 yang Mas gunakan. Anggap saja ini peta harta karun awal yang bisa Mas ikuti.



Langkah 1: Persiapan Awal



Pastikan Odoo server Mas sudah berjalan dengan baik. Kemudian, Mas perlu menentukan lokasi untuk menempatkan folder modul custom Mas. Biasanya, ini ada di dalam folder yang didaftarkan sebagai custom addons path di konfigurasi Odoo (file `odoo.conf`). Contoh: `/opt/odoo/custom_addons`. Di sinilah nanti kita akan membuat folder modul baru.



Langkah 2: Struktur Folder Dasar Modul Custom



Setiap modul Odoo itu sebenarnya adalah sebuah Python package. Jadi, ia punya struktur folder dan file yang spesifik. Untuk modul awal, Mas bisa bayangkan strukturnya seperti ini:


custom_addons/
nama_modul_saya/
__init__.py
__manifest__.py
models/
__init__.py
nama_file_model.py
views/
__init__.py (Opsional, tapi bagus untuk konsistensi)
nama_file_view.xml
security/
ir.model.access.csv


Penjelasan singkat:

  • nama_modul_saya/: Ini adalah root folder modul Mas. Nama foldernya harus unik dan sebaiknya tidak mengandung spasi atau karakter khusus.

  • __init__.py (di root): File ini wajib ada untuk menandakan bahwa folder `nama_modul_saya` adalah sebuah Python package. Isinya nanti akan mengimpor sub-package seperti `models`.

  • __manifest__.py: Ini adalah "kartu identitas" modul Mas. Isinya metadata tentang modul.

  • models/: Folder ini berisi definisi model (objek data) untuk modul Mas.

  • views/: Folder ini berisi definisi tampilan (UI) untuk modul Mas, seperti form view, tree view, menu, dan action window.

  • security/: Folder ini berisi file yang mengatur hak akses pengguna ke data yang dibuat oleh modul Mas.





Langkah 3: File Esensial dan Contoh Sederhana "Hello World" (Model Baru)



Kita akan buat modul sederhana yang membuat model baru dan menampilkannya di menu Odoo.

1. File __manifest__.py (Di dalam folder `nama_modul_saya/`)



Ini adalah hal pertama yang harus dibuat. Isi file ini dalam format dictionary Python:

```python
{
'name': "Modul Halo Dunia Ku",
'summary': "Modul sederhana untuk belajar custom Odoo",
'description': """
Ini adalah modul pertama saya untuk belajar custom Odoo 16.
Mencoba membuat model, view, dan menu sederhana.
""",
'author': "Kurniawan",
'website': "https://www.perusahaan-anda.com",
'category': 'Uncategorized',
'version': '0.1',
'depends': ['base'], # Modul ini bergantung pada modul 'base' Odoo
'data': [
'security/ir.model.access.csv', # Penting: security harus di-load duluan
'views/halo_dunia_views.xml',
],
'installable': True,
'application': True,
'auto_install': False,
}
```


Penting: Pastikan Mas mengidentifikasi modul-modul lain yang menjadi "dependensi" (ketergantungan) modul Mas di list `depends`. Untuk awal, `base` sudah cukup. Juga, perhatikan urutan `data`. File `security` harus selalu di-load sebelum `views` yang menggunakan model yang diatur security-nya.

2. File __init__.py (Di dalam folder `nama_modul_saya/`)



File ini mengimpor sub-package `models` agar Python tahu ada kode di sana yang perlu dijalankan.

```python
from . import models
```

3. File __init__.py (Di dalam folder `nama_modul_saya/models/`)



File ini mengimpor semua file model Python yang ada di folder `models/`.

```python
from . import halo_dunia
```

4. File Model halo_dunia.py (Di dalam folder `nama_modul_saya/models/`)



Di sinilah Mas mendefinisikan struktur data (model) baru.

```python
from odoo import models, fields

class HaloDunia(models.Model):
_name = 'halo.dunia' # Nama teknis model, harus unik dan lowercase
_description = 'Model Halo Dunia Sederhana'

name = fields.Char(string='Nama Pesan', required=True)
pesan = fields.Text(string='Isi Pesan')
tanggal = fields.Date(string='Tanggal Dibuat', default=fields.Date.today())
aktif = fields.Boolean(string='Aktif', default=True)
```


Di sini kita membuat model baru dengan nama teknis `halo.dunia` dan beberapa field sederhana seperti `name` (karakter), `pesan` (teks panjang), `tanggal`, dan `aktif` (boolean).

5. File ir.model.access.csv (Di dalam folder `nama_modul_saya/security/`)



File ini mengatur siapa saja yang boleh membaca, menulis, membuat, atau menghapus data di model `halo.dunia`.

```csv
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_halo_dunia_user,halo.dunia.user,model_halo_dunia,,1,1,1,1
```


Baris di atas memberikan hak akses penuh (read, write, create, unlink) ke semua pengguna (karena `group_id:id` dikosongkan) untuk model `halo.dunia`. Nama `model_halo_dunia` akan secara otomatis dibuat oleh Odoo saat modul diinstal, merujuk ke model `halo.dunia` kita.

6. File Views halo_dunia_views.xml (Di dalam folder `nama_modul_saya/views/`)



File ini mendefinisikan bagaimana data dari model `halo.dunia` akan ditampilkan di antarmuka Odoo, termasuk menu untuk mengaksesnya.

```xml




halo.dunia.form
halo.dunia
















halo.dunia.tree
halo.dunia












Halo Dunia
halo.dunia
tree,form








```


Di sini kita mendefinisikan:

  • Form View: Tampilan detail saat Mas membuka satu record.

  • Tree View: Tampilan daftar (list) saat Mas melihat banyak record.

  • Action Window: Ini adalah "jembatan" antara menu dan tampilan data. Ia menentukan model apa yang akan ditampilkan dan dalam mode apa (tree, form, dll.).

  • Menu Item: Ini yang akan muncul di antarmuka Odoo agar Mas bisa mengakses data. Kita buat satu menu root "Halo Dunia" dan sub-menu "Daftar Pesan" yang mengarah ke `action_halo_dunia`.





Langkah 4: Menginstal dan Mengupdate Modul



Setelah semua file di atas dibuat dan diletakkan pada struktur folder yang benar:

1. Restart Server Odoo Mas. Ini penting agar Odoo mendeteksi perubahan pada file-file Python dan XML.
2. Pastikan jalur `custom_addons` di file konfigurasi Odoo Mas (`odoo.conf`) sudah mencakup folder induk `nama_modul_saya`. Contoh: `addons_path = /opt/odoo/addons,/opt/odoo/custom_addons`.
3. Aktifkan Developer Mode di Odoo (Settings -> Activate the developer mode).
4. Buka aplikasi "Apps" (atau "Aplikasi") di Odoo.
5. Klik "Update Apps List". Ini akan memaksa Odoo untuk mencari modul-modul baru.
6. Cari modul Mas dengan mengetik "Halo Dunia" (atau nama modul yang Mas berikan di `__manifest__.py`) di kolom pencarian.
7. Klik tombol "Install" pada modul Mas.

Voila! Setelah terinstal, Mas akan melihat menu "Halo Dunia" di antara menu aplikasi Odoo Mas. Klik menu tersebut, lalu klik "Daftar Pesan", dan Mas akan bisa mulai membuat record "Halo Dunia" pertama Mas.



Tips Khusus untuk Odoo 16 dan Urutan Belajar yang Disarankan:



1. Pahami ORM Odoo: Ini adalah jantung Odoo. ORM (Object Relational Mapping) adalah cara Odoo berinteraksi dengan database. Pahami konsep `models.Model`, `fields`, dan bagaimana metode-metode seperti `create()`, `write()`, `search()`, `unlink()` bekerja.
2. Manfaatkan Developer Mode: Mode ini sangat powerful. Saat aktif, Mas bisa melihat nama teknis field, XML ID, struktur view, dan banyak informasi berguna lainnya langsung dari UI Odoo. Ini sangat membantu saat Mas ingin memodifikasi view atau menambahkan field di model existing.
3. Intip Modul Standar Odoo: Odoo itu open source! Mas bisa lihat bagaimana modul-modul bawaan Odoo (seperti `sale`, `purchase`, `stock`, `account`) dibuat. Itu adalah contoh terbaik untuk belajar praktik terbaik dan struktur kode.
4. Gunakan Odoo Shell: Ini adalah Python console interaktif yang terintegrasi dengan environment Odoo Mas. Sangat berguna untuk menguji query ORM, membuat data, atau mencoba logika bisnis tanpa harus melalui UI. Mas bisa jalankan dengan `python odoo-bin shell -c /path/to/odoo.conf`.
5. Belajar Python Dasar & XML: Karena Odoo dibangun dengan Python dan menggunakan XML untuk UI, pemahaman dasar kedua bahasa ini akan sangat membantu.
6. Fokus pada Flow Kerja: Setelah bisa membuat model dan view sederhana, coba kembangkan dengan menambahkan relasi antar model (One2Many, Many2One, Many2Many), lalu coba tambahkan business logic menggunakan method di model.



Perjalanan belajar custom Odoo memang butuh kesabaran, Mas. Tapi dengan pondasi yang kuat dan semangat yang tinggi, saya yakin Mas Kurniawan akan segera mahir. Jangan ragu bertanya lagi jika ada bagian yang kurang jelas atau menemui hambatan. Komunitas ini siap membantu!

Selamat mencoba dan semangat ngodingnya, Mas Kurniawan!

Berikan Tanggapan

⚠️ Anti-Spam Aktif: Dilarang menyertakan tautan/URL di dalam form ini.
Butuh Konsultasi Odoo? 👋
Scroll to Top