Membuat Module Odoo (Bagian 4 – Fields)

Jika anda mengasumsikan model dengan tabel database, maka fields adalah kolom-kolomnya. Karena Odoo akan secara otomatis membuat tabel di database dengan nama model, dan kolom-kolom sebanyak dan dengan nama yang sama dengan fields yang anda tulis. Dan anda pun tidak perlu melakukan query secara manual, cukup panggil model kemudian ikuti dengan nama field, seperti anda memanggil object dengan property-propertynya. Sama seperti kolom-kolom pada tabel database, anda perlu mengatur tipe data suatu field, nilai default, constraint dan lain-lain. Nama field pun sama dengan nama kolom database, tidak boleh mengandung spasi.

Penulisan suatu fields umumnya seperti ini.

from odoo import api, fields, models, _

class NamaClass(models.Model):
    _name = "nama.model"

    nama_fields_1 = fields.TipeData(parameter1,parameter2)
    nama_fields_2 = fields.TipeData(parameter1,parameter2)

Nama fields bebas, asalkan tidak mengandung spasi dan karakter aneh2. Jika terdiri dari banyak kata gunakan underscore sebagai penghubung. Sedangkan tipe datanya sebagai berikut :

  1. Boolean

    Sama dengan bahasa pemrograman lain. Tipe data ini menyimpan nilai True atau False. Contoh penulisannya.

        is_confirmed = fields.Boolean()
    
  2. Integer

    Sama dengan bahasa pemrograman lain. Tipe data ini menyimpan nilai bilangan bulat, tanpa koma. Contoh penulisannya.

        jumlah = fields.Integer()
    
  3. Float

    Sama dengan bahasa pemrograman lain. Tipe data ini menyimpan nilai bilangan baik dengan koma ataupun tanpa koma. Contoh penulisannya.

        harga = fields.Float()
    
  4. Char

    Char disini bukan Character seperti di bahasa Java yang hanya bisa menyimpan satu karakter saja, tapi lebih ke Varchar seperti di sql yang bisa menyimpan lebih dari satu karakter. Gunakan untuk menyimpan text dengan panjang kurang dari 255 character. Contoh penulisannya.

        name = fields.Char()
    
  5. Text

    Gunakan untuk menyimpan text dengan panjang lebih dari 255 character yang tidak mungkin disimpan oleh Char. Contoh penulisannya.

        isi_artikel = fields.Text()
    
  6. Date dan Datetime

    Gunakan untuk menyimpan tanggal tanpa waktu (Date) atau dengan waktu (Datetime). Contoh penulisannya.

        confirm_date = fields.Date() # tidak menyimpan jam, menit detik
        checked_date = fields.Datetime() # menyimpan jam, menit detik
    
  7. Binary

    Gunakan untuk menyimpan file, seperti gambar dll. Contoh penulisannya.

        attachement = fields.Binary() 
    
  8. Selection

    Gunakan untuk menyimpan data yang berupa pilihan tetap. Misal jenis kelamin. Jika menggunakan tipe data ini, Odoo akan secara otomatis membuat dropdown. Contoh penulisannya.

        jenis_kelamin = fields.Selection([
            ('laki-laki','Laki Laki'), # format (string_yang_disimpan_didatabase,string_yang_ditampilkan_pada_user)
            ('perempuan','Perempuan')
        ]) 
    
  9. Relational Type

    Selain tipe data diatas, ada juga tipe data yang berupa relasi, seperti Many2one, One2many dan Many2many, mirip dengan relasi yang ada di database. Tipe data ini lebih kompleks, dan akan dijelaskan pada bagian yang lain.

PENTING !!! JANGAN UBAH / OVERRIDE TIPE DATA SUATU FIELDS

Misal ini adalah contoh script module sale bawaan Odoo. Di kode ini jumlah penjualan disimpan dalam bentuk Float.

from odoo import api, fields, models, _

class SaleOrderLine(models.Model):
    _name = 'sale.order.line'

    product_uom_qty = fields.Float(string='Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True, default=1.0)

Anda bisa saja mengubah tipe data menjadi Integer dengan kode ini.

from odoo import api, fields, models, _

class SaleOrderLineCustom(models.Model):
    _inherit = 'sale.order.line'

    product_uom_qty = fields.Integer(string='Quantity', digits=dp.get_precision('Product Unit of Measure'), required=True, default=1)

Kode diatas akan berjalan, tapi jangan anda lakukan jika tidak ingin sakit kepala. Anda boleh mengubah parameter suatu field, seperti mengganti nilai default, label, jumlah digit dll seperti ini.

from odoo import api, fields, models, _

class SaleOrderLineCustom(models.Model):
    _inherit = 'sale.order.line'

    product_uom_qty = fields.Float(string='Jumlah', digits=(12.2), required=True, default=5)

Tapi jangan pernah mengubah tipe data seperti pada script sebelumnya.

Tulisan Serupa

Leave a Reply