Szeto Consultants

Tanya Komunitas: Cara Implementasi Transient Model Odoo untuk Form Wizard & Proses Sementara

Tanya Komunitas: Cara Implementasi Transient Model Odoo untuk Form Wizard & Proses Sementara

Diposting pada 16 Jun 2026, 00:45
Ditanyakan oleh: Fahmi

Halo teman-teman praktisi Odoo di sini!

Saya Fahmi dari tim IT di perusahaan. Saat ini kami sedang mengembangkan beberapa modul kustom di Odoo, dan saya lagi kepikiran untuk bikin form wizard atau proses data sementara yang nanti datanya nggak perlu disimpan permanen di database, jadi setelah selesai diproses ya datanya hilang otomatis.

Nah, dari yang saya baca, kayaknya Transient Model itu paling cocok ya untuk kasus kayak gini? Saya mau tanya, bagaimana ya best practice atau langkah-langkah yang direkomendasikan untuk membuat Transient Model di Odoo?

Apakah ada contoh sederhana atau tips khusus yang perlu diperhatikan, terutama dalam hal definisi modelnya, pembuatan view-nya (form dan action), dan cara menghubungkannya dengan action atau button di modul lain? Mungkin juga ada hal-hal terkait hak akses atau cleanup data yang perlu jadi perhatian?

Terima kasih banyak atas pencerahannya ya! Semoga ada yang bisa sharing pengalamannya.

Balasan (1)

Admin Odoo ForumAdmin & AI Support16 Jun 2026, 00:46
Halo Mas Fahmi, selamat bergabung di komunitas Odoo Indonesia! Senang sekali bisa berdiskusi soal pengembangan kustom di Odoo.

Pertanyaannya sangat relevan dan memang Transient Model itu solusi yang pas banget untuk kasus seperti yang Mas Fahmi jelaskan, yaitu form wizard atau proses data sementara yang tidak perlu disimpan permanen. Konsepnya sudah betul sekali!

Yuk, kita bedah bareng bagaimana best practice dan langkah-langkahnya.



### Apa Itu Transient Model di Odoo?

Secara singkat, Transient Model adalah tipe model khusus di Odoo yang dirancang untuk menyimpan data sementara. Bedanya dengan `models.Model` (model standar), data di `models.TransientModel` ini akan dihapus secara otomatis oleh Odoo setelah jangka waktu tertentu (biasanya beberapa jam atau hari, diatur oleh cron job `Ir.model.cleanup.wizard`).

Ini sangat ideal untuk:
Form Wizard: Proses multi-step atau input data sementara sebelum melakukan aksi final.
Laporan Sementara: Menampung hasil komputasi sebelum diekspor atau ditampilkan.
Konfirmasi Aksi: Menampilkan pop-up konfirmasi dengan pilihan tambahan sebelum mengeksekusi sesuatu.



### Langkah-langkah Rekomendasi Membuat Transient Model

Mari kita buat kerangkanya.

#### 1. Definisi Model Python (`models.py`)

Ini adalah inti dari Transient Model Anda.

Inherit dari `models.TransientModel`: Pastikan model Anda mewarisi kelas ini.
Definisi Field: Tentukan field-field yang Anda butuhkan untuk input atau menampung data sementara, sama seperti model biasa.

Contoh sederhana:

```python
from odoo import models, fields, api

class MyTransientWizard(models.TransientModel):
_name = 'my.transient.wizard'
_description = 'Wizard for Temporary Process'

input_text = fields.Char(string="Input Text", required=True)
process_date = fields.Date(string="Process Date", default=fields.Date.context_today)
result_message = fields.Text(string="Result", readonly=True)

@api.model
def default_get(self, fields_list):
res = super().default_get(fields_list)
# Contoh, jika ingin mengambil data dari context saat wizard dibuka
if self._context.get('active_id') and self._context.get('active_model') == 'res.partner':
partner = self.env['res.partner'].browse(self._context.get('active_id'))
res['input_text'] = f"Processing for Partner: {partner.name}"
return res

def action_process_data(self):
self.ensure_one() # Pastikan hanya 1 record wizard yang diproses

# Lakukan logika pemrosesan data di sini
# Misalnya, update field di model lain, generate laporan, dll.
# Data dari wizard bisa diakses melalui `self.input_text`, `self.process_date`

# Contoh sederhana:
processed_data = f"Data '{self.input_text}' diproses pada {self.process_date}."
# Misalnya, kita bisa mengupdate field result_message di wizard itu sendiri
self.write({'result_message': processed_data + "nProses selesai!"})

# Untuk kasus wizard yang perlu memicu aksi lain setelah selesai,
# Anda bisa mengembalikan action lain, misalnya membuka view model lain.
# return {
# 'type': 'ir.actions.act_window',
# 'name': 'Model Tujuan',
# 'res_model': 'res.partner',
# 'view_mode': 'form',
# 'res_id': self._context.get('active_id'),
# 'target': 'current',
# }

# Jika hanya ingin menutup wizard, tidak perlu return apa-apa
# atau return {'type': 'ir.actions.act_window_close'}
# Karena kita update result_message, wizard akan tetap terbuka menampilkan result.
# Jika ingin langsung menutup dan tidak ada perubahan tampilan, return empty dictionary {}
return {}
```

#### 2. Definisi View XML (`views/my_wizard_views.xml`)

Anda memerlukan view untuk menampilkan form wizard Anda.

Form View: Definisikan tampilan form untuk Transient Model Anda.
Window Action: Buat `ir.actions.act_window` agar wizard bisa dipanggil.

```xml




my.transient.wizard.form
my.transient.wizard



















Open Temporary Process Wizard
my.transient.wizard
form
new




```
Perhatikan `target="new"` pada `ir.actions.act_window`. Ini akan membuat wizard terbuka sebagai pop-up atau dialog baru, bukan mengambil alih halaman utama. Ini adalah praktik terbaik untuk wizard.

#### 3. Menghubungkan Wizard dengan Action/Button di Modul Lain

Biasanya, wizard dipanggil dari button pada form view model lain.

Tambahkan button pada form view model target (`views/res_partner_views.xml`):

```xml



res.partner.form.inherit.my.module
res.partner



Berikan Tanggapan

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