Field Options dan Field Types Pada Models.py Django 3.1
Field Options dan Field Types Pada Models.py Django 3.1

Sekarang kita akan mengenal beberapa Field Options dan Field Types Pada Models.py Django 3.1, Ya beberapa. Karena memang banyak, dan yang akan disebutkan pada tulisan ini adalah yang sering saya gunakan dalam membuat website menggunakan Django. Dan itu diantaranya ada Option yang wajib digunakan pada Field Type tertentu.

Apakah Fields Option dan Field Types Itu?

Sebelum melanjutkan tentang beberapa Field Options dan Field Types, baiknya kita mengetahui apa yang dimaksud dengan itu. Sebelumnya kita lihat terlebih dahulu models.py yang sudah pernah dibuat sebelumnya pada Belajar Django 3.1 Mengenal Models.

class Artikel(models.Model):
    judul = models.CharField(max_length=100)
    isi = models.TextField()
    kategori = models.CharField(max_length=100)
    tanggal_terbit = models.DateField(auto_now_add=True)

    def __str__(self):
        return self.judul

Saya mau ambil satu baris dari kode di atas untuk contoh saja. judul = models.CharField(max_length=100). Pada baris ini ada 3 bagian yaitu:

  • judul = variabel yang mewakili suatu kolom bernama judul pada tabel blog_artikel (blog adalah nama app dan artikel adalah nama class Artikel(). Begitu juga dengan isi, kategori, dan tanggal_terbit
  • models.CharField() pada bagian ini disebut dengan Field Types, jika kita melihat dari sudut pandang Database misalkan MySQL, ini adalah Type Data yang digunakannya. Seperti CHAR, VARCHAR, INTEGER, BOOLEAN, DATE, LONGTEXT, dan lainnya. Yang pada contoh ini CharField itu sama dengan VARCHAR.

    Lalu jika dilihat dari sisi HTML Widget, ini digunakan untuk rendering pada sebuah form field. Contoh models.CharField() HTML Widgetnya adalah <input type="text"/>, dan lainnya seperti select, dan lainnya yang akan dibahas berikutnya.

  • max_length=100 disebut dengan Field Options yaitu merupakan sekumpulan arguments untuk field tertentu. Ada argument umum yang bisa digunakan untuk semua Field Types, ada juga argumen khusus yang hanya digunakan pada Field Types tertentu, dan ada argumen wajib yang harus digunakan pada field tertentu. Misalkan CharField memiliki argumen wajib max_length untuk menentukan panjang maksimum dari VARCHAR, dan lainnya yang akan dibahas sesaat lagi.

Field Options

Seperti yang sudah disebut sebelumnya, Field Options ini merupakan sekumpulan argumen untuk field tertentu. Dikatakan sekumpulan karena kita bisa memberikan argumen pada sebuah Field Types lebih dari satu yang dipisahkan dengan koma (,). Dam ada argument umum, khusus, dan wajib.

Mari kita lihat satu persatu beberapa File Options berikut ini:

  1. null. Argumen null untuk menyatakan bahwa field tersebut boleh kosong jika null = True dan tidak boleh kosong jika null = False. Default dari nilai null ini adalah False. Argumen ini termasuk dalam argumen yang umum
  2. blank. Bila kita lihat sekilas mirip seperti argumen null, tapi sebenarnya ini berbeda walaupun sama-sama kosong. Perbedaannya adalah null itu lebih kepada database related dan blank ini lebih ke validasi, keduanya ini harus digunakan bersamaan. Atau bisa juga menggunakan satu saja, tapi menambahkan argument default.

    Jadi misalkan, pada sebuah field diberi argument null=True tapi tidak menambahkan juga argumen blank=True, maka pada formulir, jika bidang ini kosong tetap akan menampilkan pesan error. Yang artinya, kita tidak bisa mensubmit data.

    Begitu juga jika mengambahkan argument blank=True, tapi tidak menambahkan null=True maka akan ada pesan error dari sisi database, saat mengirim datanya. Meski pada form dinyatakan valid karena blank=True, tapi field atau bidang pada database tidak valid karena null=False alias tidak boleh kosong.

  3. choices. Argument ini pada form widget akan menghasilkan select box, meski kita menggunakan CharField. Cara membuat choices seperti ini:
    KELAS = [
            ('1', 'Kelas 1'),
            ('2', 'Kelas 2'),
            ('3', 'Kelas 3'),
        ]

    Pilihan yang dibuat menggunakan tipe data tuples, pada elemen pertama yaitu '1', '2', dan '3' yang akan disimpan ke database. Dan elemen kedua yaitu 'Kelas 1', 'Kelas 2', dan 'Kelas 3' yang akan ditampilkan pada form widget field.

    Lalu untuk penggunaannya sendiri seperti berikut ini, lihat pada field kelas:

    class Kelas(models.Model):
        KELAS = [
            ('1', 'Kelas 1'),
            ('2', 'Kelas 2'),
            ('3', 'Kelas 3'),
        ]
        nama = models.CharField(max_length=50)
        kelas = models.CharField(choices=KELAS, max_length=1)
  4. default untuk menentukan nilai default dari field tersebut. Value bisa mengambil dari objek yang bisa dipanggil.
  5. unique filed yang diberi argumen unique=True maka, isinya tidak boleh sama. Jika memaksa untuk memasukkan data yang sama pada field tersebut maka akan muncul error saat proses method save().
  6. help_text argumen ini tidak berhubungan dengan database, field yang diberi argumen ini akan menampilkan teks pada form.
  7. max_length argumen wajib Field Types CharField dan Field Type lain yang satu kelompok dengan input type text, untuk menentukan panjang maksimum teks input.
  8. auto_now_add dan auto_now, argumen optional khusus untuk input tanggal dan waktu. Dengan menggunakan salah satu argumen ini, tanggal dan waktu akan terisi otomatis dan field tidak ditampilkan pada form.

    Argument auto_now_add=True akan mengambil tanggal saat pertama menyimpan record dan tidak diperbarui lagi value-nya saat diedit. Dan auto_now akan memperbarui tanggal dan waktu saat ini, ketika ada data yang diedit. Maksudnya field ini akan mengubah tanggal dan waktu secara otomatis sesuai dengan tanggal dan waktu saat data tersebut diperbarui.

Ok, sepertinya ini dulu untuk Field Options. Mungkin akan ditambahkan lagi yang lainnya, jika memang itu diperlukan.

Field Types

Meskipun di Django kita tidak membuat sendiri schema databasenya, entah itu dengan command line atau melalui tools seperti PHPMyAdmin. Setidaknya kita, juga perlu mengetahui tipe data yang akan digunakan. Agar tidak salah dalam menggunakan Field Types milik Django.

Dan di Django, kita tidak khawatir dengan aneka macam software database. Sebab, apapun basis data yang digunakan. Tetap menggunakan satu kode program pada models. Meskipun teman-teman sudah menyelesaikan proyek website, dan tiba-tiba ingin mengganti software database itu tidak masalah. Tetap bisa dilakukan dengan tanpa mengubah kode pada models. Cukup dengan menyesuaikan saja engine basis data yang digunakan pada file settings.py.

Terkait dengan data yang sudah ada, maka itu bisa dibackup untuk di dump ke database baru meski itu berbeda DBMS. Baik, sekarang kita lihat beberapa Field Types pada Django

  1. IntegerField sesuai dengan namanya itu untuk menyimpan data angka, pada sisi databasenya ini adalah INT. Dan dengan type yang sama, juga ada big_auto_field dan big_integer_field. Yang sama-sama menggunakan number input pada form widget.
  2. BinaryField jika punya data biner mentah, byte, bytearray, atau memoryview. Lebih baik menggunakan field type ini. Dari IntegerField sampai BinaryField, sama-sama memiliki argument optional tambahan yaitu max_length untuk menentukan batas panjang maksimumnya.
  3. BooleanField adalah tipe benar atau salah, dengan form widget input type checkbox.
  4. Berikutnya ada CharField, pada database ini adalah VARCHAR dan pada sisi front end ini akan dirender menjadi input type text atau text input. CharField memiliki argument wajib yaitu max_length.
  5. EmailField sama seperti CharField yaitu VARCHAR plus ditambah validasi email format.
  6. DateField, DataTimeField, TimeField tipe field ini mempunyai dua argumen optional khusus yaitu auto_now tanggal dan waktu akan diupdate ke tanggal saat dilakukan perubahan. Dan auto_now_add menyimpan tanggal dan waktu saat pertama kali disimpan.

    Menggunakan instance python datetime.date untuk DateField, pada DateTimeField menggunakan datetime.datetime, dan TimeField representasi dari datetime.time. Kedua argument tidak bisa digunakan bersamaan pada satu field. Yang pada form widget untuk menginput date, date time, dan time.

  7. DecimalField tipe ini memiliki dua argumen wajib, yaitu max_digit adalah jumlah digit maksimum dan decimal_place jumplah desimal yang akan disimpan. Jumlah max_digit harus lebih besar dari decimal_place. Untuk menyimpan 1 milyar maka max_digit=19, decimal_place=10
  8. FileField dan ImageField keuda tipe field ini adalah file upload. Pada ImageField merupakan inherit dari FileField dan sudah ditambahkan dengan validasi hanya objek gambar saja yang boleh diupload. Mempunyai argumen optional yaitu upload_to untuk menentukan lokasi direktori tujuan upload dan storage. Untuk ImageField mempunya argumen tambahan lainnya adalah height_field dan width_field.
  9. TextField untuk menyimpan teks dalam jumlah yang banyak.
  10. SlugField juga bertipe VARCHAR dan ada tambahan validasi slug, yaitu tidak boleh ada spasi. Dan hanya boleh diisi dengan (-), (_), serta karakter (a-z), (A-Z), dan angka (0-9).

Field Types lainya juga ada ForeignKey satu ke banyak, OneToOneField satu ke satu, dan ManyToManyField banyak ke banyak. Field Types ini bekerja untuk relasi database. Yang memiliki argumen on_delete, limit_choices_to, related_name, related_query_name, dan to_field.

Belajar Django Selanjutnya

Setidaknya beberapa Field Types dan Field Options yang sudah disebut di atas, yang lebih banyak digunakan. Untuk mengetahui lebih banyak tentang ini, Anda bisa langsung menuju ke halaman resmi djangoproject.com pada https://docs.djangoproject.com/en/3.1/ref/models/fields/.

Yang akan kita pelajari selanjutnya adalah membuat views. Untuk views sendiri punya dua tipe yaitu Class Based Views dan Function Based Views.

Seperti biasa, kalau ada pertanyaan silahkan ajukan pada komentar atau melalui kontak di atas.