Domain pada Odoo

Di Odoo ada beberapa attribute/property yang bisa digunakan untuk mengatur field yang ingin ditampilkan. Kali ini saya akan membahas attribute “domain” yang ada pada Odoo.

Logo Odoo

Domain digunakan untuk melakukan filter pada sebuah field. Filter domain dilakukan agar tree view atau dropdown list dapat menampilkan data sesuai dengan kebutuhan kita. Penempatan domain bisa dilakukan di sebuah field di model, tree, atau bisa juga di sebuah action pada xml view.

Domain berbentuk “list of tuple”, pola penulisannya adalah [(‘field_yg_difilter’, ‘operator’, nilai_filter)]. Dalam sebuah list, bisa mempunyai lebih dari satu tuple.

Anggap saja kita mempunyai sebuah model awal seperti ini:

class ResCompanyInherit(models.Model)
	_inherit = 'res.company'

	is_active = fields.Boolean(string="Active")

Domain pada model sendiri.

Untuk melakukan filtering dengan domain pada model sendiri bisa dilakukan di sebuah action xml view. Contohnya:

<record model="ir.actions.act_window" id="action_res_company_inherit">
	<field name="name">Kantor</field>
	<field name="res_model">res.company</field>
	<field name="view_type">form</field>
	<field name="view_mode">tree,form</field>
	<field name="inherit_id" ref="view_res_company"/>
	<field name="domain">[('is_active', '=', True)]</field>
</record>

Hasil dari penulisan domain diatas adalah, pada sebuah list view yang menampilkan data ‘res.company’ yang memiliki field ‘is_active’ yang bernilai True saja yang ditampilkan.

Domain pada model yang terhubung atau ber-relasi.

Misal kita mempunyai suatu model yang terhubung dengan models ‘res.company’:

class TestModel(models.Model)
	_name = 'test.model'

	# contoh penulisan domain pada field
	company_id = fields.Many2one('res.company', string="Kantor", domain=[('is_active', '=', True)])

Contoh diatas adalah penulisan domain pada sebuah field. Penjelasan dari domain diatas adalah, field akan menampilkan ‘res.company’ yang mempunya field ‘is_active’ bernilai True.

Untuk penulisan domain pada sebuah field pada form view contohnya:

<record model="ir.ui.view" id="view_test_model_form">
	<field name="name">test.model.form</field>
	<field name="model">test.model</field>
	<field name="arch" type="xml">
		<form>
			<field name="company_id" domain="[('is_active', '=', True)]"/>
		</form>
	</field>
</record>

Selain itu kita juga bisa menambahkan domain saat memanggil sebuah action pada sebuah method python, seperti:

class OtherModel(models.Model):
	_name = 'other.model'

	# untuk memanggil action dari python.
	def call_action_model1(self):
		action = self.env.ref('some_module.action_view_model1')
		result = action.read()[0]
		# tambahkan domain jika dibutuhkan
		result['domain'] = [
			('is_active', '=', True)
		]
		return result

Catatan:

  • Jika sudah menuliskan domain pada sebuah field model, maka tidak perlu lagi menuliskan pada form view.
  • Domain pada model yang terhubung ini, tidak bisa dilakukan pada tree view. Untuk tree view hanya bisa dilakukan jika domain pada model sendiri dengan penulisan di action.
  • Pada domain bisa ditambahkan operator logika seperti “OR” dan “AND”. “OR” menggunakan tanda “|” dan “AND” menggunakan tanda “&”.
  • Penulisan operator logika di domain menggunakan Polish Notation. Contohnya: domain=[‘|’, (‘is_active’, ‘=’, True), (‘field2’, ‘=’, somevalue)].
  • Domain biasa dikombinasikan dengan context.

Terima kasih sudah membaca. Selamat mencoba.

Comments

1 komentar untuk “Domain pada Odoo”

  1. Ping-kembali: Context pada Odoo - Cak Juice

Komentar ditutup.