Model/object akan menjadi table di database dan kolomnya adalah fields. Tapi tidak semua field akan menjadi kolom, ada beberapa jenis field yang hanya tampil di aplikasi tapi tidak disimpan ke database (isinya merupakan hasil compute dari field lain). Cara penulisan fields silahkan lihat di addons puskesmas. Jenis-jenis field di odoo diantaranya :

  • Char : jenis inputan char
  • Boolean : jenis inputan True/False (default=False)
  • Integer : jenis inputan number (tanpa decimal)
  • Float : jenis inputan decimal
  • Text : jenis inputan char, bedanya dengan field Char adalah kolomnya lebih lebar
  • Selection : jenis inputan pilihan, data yang dipilih bersifat statis ditulis dalam coding
  • Html : hampir sama dengan field Text, bedanya kolom field ini menerapkan kode html
  • Date : jenis inputan tanggal
  • Datetime : jenis inputan tanggal dan waktu
  • Many2one : jenis inputan pilihan, data yang dipilih bersifat dinamis berdasarkan jumlah record di object lain (relasi ke object lain)
  • One2many : merupakan kebalikan dari Many2one, jika dari object A ada relasi Many2one ke object B, maka di object B dapat dibuat relasi One2many ke object A. Dan record yang dimunculkan di object B adalah sebanyak record A yang berelasi ke B.
  • Many2many : relasi banyak ke banyak

Jenis-jenis field di atas hampir semuanya ada pada addons puskesmas, silahkan diexplore.

Attribute Fields

Seperti halnya model, maka field juga memiliki beberapa attribute, diantaranya :

  • string : nama field saat tampil di view
  • required : (default: False) jika True maka field wajib diisi. Dan di database akan membuat kolom jadi not null
  • help : informasi mengenai fungsi dari field tersebut
  • index : membuat index di database
  • readonly : (default: False) jika True maka field tidak dapat diedit
  • default : default value field ketika pertama kali klik tombol create
  • states : field akan muncul ketika state tertentu sesuai yang ditulis di sini, dan akan di hide jika state tidak sama dengan yang didefinisikan di sini
  • groups : field hanya akan muncul di grup user tertentu (hak akses)
  • copy : (default: True) jika record di duplicate maka isi field pada record baru akan sama dengan field pada record yg di duplicate
  • compute : value field diisi oleh function (tidak diisi manual). Field yang memiliki attribute ini secara default tidak akan disimpan ke database
  • related : value field berdasarkan relasi ke field lain. Field yang memiliki attribute ini secara default tidak akan disimpan ke database
  • store : (default: False) dipakai pada field yang menggunakan related atau compute. Fungsinya untuk menyimpan field tersebut ke database (jika value nya diset True)
  • digits : mengatur format decimal pada field float
  • size : mengatur panjang karakter pada field char
  • domain : dipakai pada field Many2one dan One2many untuk memfilter data
  • comodel_name : nama object relasi pada field One2many
  • translate : (default: False) mengaktifkan mode translate pada field
  • attrs : dapat menerapkan attribute invisible, required, readonly berdasarkan kondisi field lain
  • dll

Ada beberapa field yang akan terbuat otomatis setiap kita mendefinisikan object baru dan juga value nya akan terisi otomatis, yaitu :

  • id : format integer, nomor database unique (auto increment)
  • create_date : format datetime, tanggal create record
  • create_uid : format many2one, id user yang create record
  • write_date : format datetime, tanggal edit record terakhir
  • write_uid : format many2one, id user yang edit record terakhir

Field-field tersebut yang ditampilkan di beberapa form puskesmas, pada tab Audit Trail

Jika field-field tersebut dirasa tidak perlu maka bisa dihilangkan (kecuali id) dengan cara menonaktifkan _log_access seperti yang sudah dijelaskan di part sebelumnya.

Praktek

field name diset default=’/’ dan field tanggal default=fields.Datetime.now(), artinya ketika kita akan membuat record maka kedua field tersebut sudah terisi nilainya sebelum kita melakukan input.

pasien_id many2one ke res.partner dengan domain pasien=True, artinya field pasien_id akan menampilkan record yang ada pada object/table res.partner tapi hanya yang field pasien=True, karena di table res_partner ini berisi gabungan data pasien dan dokter. Perlu diperhatikan bahwa setiap ada field yang relasi many2one ke object lain maka :

  • object tersebut harus dideklarasikan di modul yang sama, atau
  • jika beda modul maka di modul yang berisi field many2one tersebut harus depends ke modul yang mendeklarasikan object tersebut. Jika tidak, maka akan terjadi error saat kita melakukan input field yang bersangkutan

field html dapat dilihat hasilnya pada tab Note di form pendaftaran. Pada field html kita bisa melakukan format terhadap teks yang diinput, attach gambar, menambahkan table, dls.

field pasien_id di object ms.pemeriksaan merupakan salah satu contoh field yang tidak akan disimpan ke database. Untuk membuktikannya silahkan buka pg admin dan cari kolom pasien_id di table ms_pemeriksaan, pasti tidak akan ketemu. Kalau anda bertanya jika field pasien_id tidak disimpan ke database, lalu dari mana value nya didapat? Maka jawabannya adalah dengan mengambil value dari table ms_pendaftaran melalui relasi pendaftaran_id, itulah fungsi dari attribute related.

tipe field lain yang juga tidak disimpan ke database adalah field yang mempunyai attribute compute seperti field usia. Berbeda dengan related yang mengambil value melalui relasi field lain, field compute valuenya bisa berdiri sendiri. Jadi kita bisa leluasa menentukan value pada method yang dipanggil di compute tersebut. Attribute compute ini bisa dipakai di field apapun, dengan assign value pada method sesuai dengan tipe field masing-masing.

field related dan compute tersebut secara default memang tidak akan disimpan ke database. Namun jika karna alasan tertentu anda ingin menyimpannya maka bisa dengan menambahkan attribute store=True.

field resep_line merupakan one2many yang berelasi ke ms.resep.obat. Yang harus diperhatikan, setiap kita menambahkan field one2many maka harus ada field many2one dari object relasi ke object field one2many. Misalnya dalam field resep_line (object ms.pemeriksaan) one2many ke ms.resep.obat, maka di object ms.resep.obat harus menambahkan field pemeriksaan_id (many2one ke ms.pemeriksaan) yang kemudian field pemeriksaan_id ini ditulis sebagai attribute inverse_name di field one2many resep_line.

Note : inverse_name merupakan salah satu attribute pada one2many, attribute ini bisa ditulis nama attributenya bisa juga tidak.

contoh :

resep_line = fields.One2many(comodel_name='ms.resep.obat', inverse_name='pemeriksaan_id', 'Resep Obat')

bisa ditulis jadi :

resep_line = fields.One2many('ms.resep.obat', 'pemeriksaan_id', 'Resep Obat')

Terimakasih, semoga bermanfaat dan CMIIW…

Tutorial odoo/openerp Indonesia