Pendahuluan

Pada bagian ini, kita akan memberikan pengantar tentang Django ORM, menjelaskan tujuan dari penggunaannya, dan merangkum isi dari tutorial ini.

Apa itu Django ORM?

Django ORM (Object-Relational Mapping) adalah bagian dari kerangka kerja Django yang bertanggung jawab untuk memetakan objek Python ke struktur basis data relasional. Ini memungkinkan pengembang untuk berinteraksi dengan basis data menggunakan model objek Python, tanpa perlu menulis kueri SQL langsung.

Daftar Isi
Tujuan dan Manfaat Penggunaan Django ORM
  • Kemudahan Pengembangan: Django ORM menyediakan antarmuka yang mudah digunakan untuk berinteraksi dengan basis data, yang mempercepat proses pengembangan.
  • Portabilitas: Dengan menggunakan model Django, kode aplikasi dapat lebih mudah dipindahkan antara berbagai sistem manajemen basis data (DBMS) tanpa perlu mengubah kueri SQL.
  • Keamanan: Django ORM secara otomatis melindungi aplikasi dari serangan SQL Injection dengan menggunakan parameterisasi query.
  • Kemudahan Pemeliharaan: Django ORM memungkinkan pengembang untuk fokus pada logika aplikasi tanpa harus memikirkan detail koneksi basis data.

II. Pengenalan Django ORM

Pada bagian ini, kita akan membahas secara mendalam tentang Django ORM (Object-Relational Mapping), termasuk definisi, keuntungan, dan cara kerjanya dalam aplikasi web Django.

Apa itu Django ORM?

Django ORM (Object-Relational Mapping) adalah bagian dari kerangka kerja Django yang bertanggung jawab untuk memetakan objek Python ke struktur basis data relasional. Dengan Django ORM, pengembang dapat mendefinisikan model Python yang merepresentasikan tabel dalam basis data, dan berinteraksi dengan data menggunakan operasi objek Python, tanpa perlu menulis kueri SQL secara langsung.

Keuntungan Django ORM
  • Kemudahan Pengembangan: Django ORM menyediakan antarmuka yang mudah digunakan untuk berinteraksi dengan basis data, yang mempercepat proses pengembangan.
  • Portabilitas: Kode aplikasi yang menggunakan Django ORM lebih mudah dipindahkan antara berbagai sistem manajemen basis data (DBMS) tanpa perlu mengubah kueri SQL.
  • Keamanan: Django ORM secara otomatis melindungi aplikasi dari serangan SQL Injection dengan menggunakan parameterisasi query.
  • Abstraksi Basis Data: Django ORM menyembunyikan kompleksitas dari basis data yang mendasarinya, memungkinkan pengembang untuk fokus pada logika aplikasi tanpa harus memikirkan detail koneksi basis data.
Cara Kerja Django ORM

Django ORM menggunakan model Python yang didefinisikan oleh pengembang untuk merepresentasikan tabel dalam basis data. Setiap atribut dalam model mewakili kolom dalam tabel, dan setiap instance model mewakili baris dalam tabel. Operasi CRUD (Create, Read, Update, Delete) dapat dilakukan pada model Python, dan Django ORM akan menghasilkan dan mengeksekusi kueri SQL yang sesuai.

Dengan pemahaman tentang konsep dasar dan keuntungan Django ORM, kita siap untuk melangkah lebih jauh ke dalam penggunaannya dalam pengembangan aplikasi web Django.

III. Konfigurasi Awal

Pada bagian ini, kita akan membahas langkah-langkah untuk melakukan konfigurasi awal Django ORM dalam proyek Django, termasuk persiapan proyek, pengaturan basis data, dan pembuatan aplikasi Django.

Persiapan Proyek Django

Sebelum kita dapat mulai menggunakan Django ORM, kita perlu membuat proyek Django terlebih dahulu. Berikut adalah langkah-langkahnya:

  1. Instalasi Django: Pastikan Django sudah terinstal di lingkungan pengembangan Anda. Jika belum, Anda dapat menginstalnya dengan menggunakan pip: pip install django
  2. Membuat Proyek Django: Gunakan perintah django-admin untuk membuat proyek Django baru: django-admin startproject nama_proyek
  3. Navigasi ke Direktori Proyek: Masuk ke direktori proyek yang baru dibuat: cd nama_proyek
Pengaturan Basis Data

Django ORM membutuhkan konfigurasi basis data untuk menyimpan data aplikasi. Konfigurasi basis data dilakukan di dalam file settings.py di dalam proyek Django. Anda dapat menggunakan berbagai jenis basis data yang didukung oleh Django, termasuk SQLite, PostgreSQL, MySQL, dan lain-lain.

Berikut adalah contoh konfigurasi basis data untuk menggunakan SQLite sebagai basis data default:

# settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}Code language: PHP (php)
Membuat Aplikasi Django Baru

Setelah proyek Django dibuat dan basis data dikonfigurasi, langkah selanjutnya adalah membuat aplikasi Django baru di dalam proyek. Aplikasi Django adalah bagian terkecil dari proyek Django yang memiliki fungsionalitas khusus.

Anda dapat membuat aplikasi baru dengan menjalankan perintah berikut:

python manage.py startapp nama_aplikasiCode language: CSS (css)

Setelah menjalankan perintah ini, aplikasi baru akan dibuat di dalam direktori proyek, dan Anda siap untuk mulai mendefinisikan model dan menggunakan Django ORM dalam aplikasi Anda.

Dengan melakukan konfigurasi awal ini, kita telah menyiapkan proyek Django untuk menggunakan Django ORM. Selanjutnya, kita akan melangkah lebih jauh dengan mendefinisikan model Django untuk aplikasi kita.

IV. Membuat Model

Pada bagian ini, kita akan belajar cara membuat model Django, yang akan menjadi representasi struktur tabel dalam basis data kita. Model-model ini akan digunakan untuk menyimpan dan mengelola data aplikasi kita.

Mendefinisikan Model Django

Untuk membuat model Django, kita perlu membuat file Python di dalam direktori aplikasi kita dan mendefinisikan kelas model di dalamnya. Setiap atribut dalam kelas model akan mewakili kolom dalam tabel yang sesuai di basis data.

Berikut adalah contoh definisi model untuk objek Pengguna dan Postingan dalam aplikasi blog:

# models.py

from django.db import models

class Pengguna(models.Model):
    nama = models.CharField(max_length=100)
    email = models.EmailField(unique=True)

    def __str__(self):
        return self.nama

class Postingan(models.Model):
    judul = models.CharField(max_length=200)
    konten = models.TextField()
    penulis = models.ForeignKey(Pengguna, on_delete=models.CASCADE)
    tanggal_terbit = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.judul
Penggunaan Bidang Model

Django menyediakan berbagai jenis bidang model yang dapat digunakan untuk memenuhi kebutuhan aplikasi kita. Contoh bidang-bidang yang umum digunakan termasuk CharField, IntegerField, DateTimeField, dan lain-lain. Setiap bidang memiliki opsi konfigurasi yang berbeda yang dapat diatur sesuai kebutuhan aplikasi.

Relasi Antar Model

Django mendukung beberapa jenis relasi antar model, termasuk One-to-One, One-to-Many, dan Many-to-Many. Relasi ini didefinisikan dengan menggunakan bidang ForeignKey, OneToOneField, dan ManyToManyField.

Pada contoh di atas, Postingan memiliki relasi Many-to-One dengan Pengguna melalui bidang penulis.

Dengan mendefinisikan model-model ini, kita telah membuat struktur basis data untuk aplikasi kita. Selanjutnya, kita perlu melakukan migrasi basis data untuk menciptakan tabel yang sesuai dalam basis data kita.

V. Migrasi Basis Data

Migrasi basis data adalah proses yang diperlukan untuk memperbarui skema basis data agar sesuai dengan definisi model yang baru atau yang telah diubah. Dalam bagian ini, kita akan mempelajari langkah-langkah untuk membuat dan menerapkan migrasi basis data dalam proyek Django.

Mengapa kita perlu migrasi basis data?
  • Mengikuti Perubahan Model: Saat kita mengubah struktur atau menambah model dalam aplikasi kita, kita perlu memperbarui skema basis data agar sesuai dengan perubahan tersebut.
  • Mengelola Perubahan Kolom: Migrasi basis data memungkinkan kita untuk menambah, menghapus, atau mengubah kolom dalam tabel tanpa kehilangan data yang ada.
Membuat Migrasi Basis Data

Untuk membuat migrasi basis data, kita perlu menjalankan perintah makemigrations di dalam direktori aplikasi kita:

python manage.py makemigrations nama_aplikasiCode language: CSS (css)

Perintah ini akan menghasilkan file migrasi Python di dalam direktori migrations di dalam aplikasi kita.

Menerapkan Migrasi Basis Data

Setelah migrasi basis data dibuat, kita perlu menerapkannya ke basis data sebenarnya. Ini dilakukan dengan menjalankan perintah migrate:

python manage.py migrateCode language: CSS (css)

Perintah ini akan menjalankan semua migrasi yang belum diterapkan ke basis data, sehingga memperbarui skema basis data sesuai dengan definisi model terbaru.

Melihat Riwayat Migrasi

Kita juga dapat melihat riwayat migrasi basis data dengan menjalankan perintah:

python manage.py showmigrationsCode language: CSS (css)

Perintah ini akan menampilkan daftar migrasi yang sudah diterapkan dan yang belum diterapkan dalam proyek kita.

Dengan langkah-langkah ini, kita telah berhasil membuat dan menerapkan migrasi basis data dalam proyek Django kita. Basis data sekarang telah diperbarui sesuai dengan definisi model terbaru, dan kita siap untuk mulai menggunakan model dalam aplikasi kita.

VI. Interaksi dengan Model

Pada bagian ini, kita akan mempelajari cara berinteraksi dengan model Django untuk membuat, membaca, memperbarui, dan menghapus data dalam basis data.

Menggunakan Shell Django

Salah satu cara paling mudah untuk berinteraksi dengan model adalah melalui shell Django. Shell Django menyediakan lingkungan interaktif di mana kita dapat menjalankan kode Python dan mengakses model Django.

python manage.py shellCode language: CSS (css)
Membuat Objek Model Baru

Untuk membuat objek model baru dan menyimpannya dalam basis data, kita dapat menggunakan konstruktor model dan metode save().

from nama_aplikasi.models import NamaModel

objek = NamaModel(atribut1='nilai1', atribut2='nilai2')
objek.save()Code language: JavaScript (javascript)
Membaca Data dari Model

Untuk membaca data dari model, kita dapat menggunakan metode objects.all() untuk mendapatkan semua objek dalam model, atau metode objects.get() untuk mendapatkan objek tunggal berdasarkan kriteria tertentu.

# Mendapatkan semua objek dari model
semua_objek = NamaModel.objects.all()

# Mendapatkan objek tunggal berdasarkan kriteria
objek_tunggal = NamaModel.objects.get(atribut='nilai')Code language: PHP (php)
Memperbarui Objek Model

Untuk memperbarui objek model yang ada, kita dapat mengambil objek tersebut, memperbarui nilai atributnya, dan kemudian menyimpan perubahan tersebut.

objek = NamaModel.objects.get(id=id_objek)
objek.atribut = 'nilai_baru'
objek.save()Code language: JavaScript (javascript)
Menghapus Objek Model

Untuk menghapus objek model, kita dapat menggunakan metode delete() pada objek tersebut.

objek = NamaModel.objects.get(id=id_objek)
objek.delete()

Dengan memahami cara berinteraksi dengan model Django, kita dapat dengan mudah membuat, membaca, memperbarui, dan menghapus data dalam basis data aplikasi kita menggunakan Django ORM.

VII. Menggunakan Query Set

Pada bagian ini, kita akan membahas penggunaan query set dalam Django ORM untuk mengambil data dari basis data. Query set adalah objek yang mewakili kueri database, dan kita dapat menggunakan berbagai metode pada query set untuk mengambil data dengan kriteria tertentu.

Penggunaan Dasar Query Set

Untuk menggunakan query set, kita dapat memanggil metode objects pada model Django dan menerapkan metode-metode seperti filter(), exclude(), dan order_by() untuk menghasilkan kueri database.

# Mengambil semua objek dari model
semua_objek = NamaModel.objects.all()

# Menggunakan filter untuk menambahkan kriteria
objek_tertentu = NamaModel.objects.filter(atribut='nilai')

# Menambahkan kriteria negatif dengan exclude
objek_tertentu = NamaModel.objects.exclude(atribut='nilai')

# Mengurutkan hasil query
hasil_urutan = NamaModel.objects.order_by('atribut')Code language: PHP (php)
Menggunakan Operator Logika

Kita juga dapat menggunakan operator logika seperti & (AND), | (OR), dan ~ (NOT) untuk menggabungkan beberapa kriteria dalam query set.

# Menggabungkan beberapa kriteria dengan AND
objek = NamaModel.objects.filter(atribut1='nilai1', atribut2='nilai2')

# Menggabungkan beberapa kriteria dengan OR
objek = NamaModel.objects.filter(Q(atribut1='nilai1') | Q(atribut2='nilai2'))

# Kriteria negatif
objek = NamaModel.objects.filter(~Q(atribut='nilai'))Code language: PHP (php)
Menggunakan Metode Lainnya

Django ORM juga menyediakan berbagai metode lainnya untuk memanipulasi query set, seperti distinct(), values(), annotate(), dan lain-lain.

# Menggunakan distinct untuk menghindari duplikat
objek = NamaModel.objects.filter(atribut='nilai').distinct()

# Menggunakan values untuk mengambil nilai spesifik
nilai_atribut = NamaModel.objects.filter(atribut='nilai').values('atribut')

# Menggunakan annotate untuk menambahkan penghitungan atau agregasi
hasil_annotate = NamaModel.objects.annotate(jumlah=Count('atribut'))Code language: PHP (php)

Dengan menggunakan query set ini, kita dapat melakukan berbagai operasi pencarian yang kompleks dan memperoleh data yang dibutuhkan dari basis data dengan mudah menggunakan Django ORM.

VIII. Kustomisasi Model

Pada bagian ini, kita akan mempelajari berbagai teknik untuk menyesuaikan model Django agar sesuai dengan kebutuhan aplikasi kita. Kustomisasi model memungkinkan kita untuk menambahkan metode kustom, menggunakan properti sifat, dan menambahkan metode query set kustom.

Menambahkan Metode Kustom

Kita dapat menambahkan metode kustom ke dalam kelas model untuk melaksanakan logika khusus yang tidak dilakukan oleh metode bawaan Django.

from django.db import models

class NamaModel(models.Model):
    nama = models.CharField(max_length=100)
    email = models.EmailField()

    def metode_kustom(self):
        # Logika kustom di sini
        return self.nama.upper()
Menggunakan Properti Sifat

Properti sifat adalah metode Python yang digunakan untuk mengakses atau menghitung nilai yang dihasilkan secara dinamis.

from django.db import models

class NamaModel(models.Model):
    nama = models.CharField(max_length=100)
    email = models.EmailField()

    @property
    def nama_email(self):
        return f"{self.nama} <{self.email}>"Code language: HTML, XML (xml)
Menambahkan Metode Query Set Kustom

Kita juga dapat menambahkan metode query set kustom ke dalam kelas model untuk memudahkan pengambilan data yang kompleks.

from django.db import models

class NamaModelManager(models.Manager):
    def metode_query_set_kustom(self):
        return self.filter(atribut='nilai')

class NamaModel(models.Model):
    nama = models.CharField(max_length=100)
    email = models.EmailField()

    objects = NamaModelManager()

Dengan kustomisasi model ini, kita dapat meningkatkan fleksibilitas dan fungsionalitas model Django, sehingga lebih sesuai dengan kebutuhan aplikasi kita.

IX. Penggunaan Signaling

Pada bagian ini, kita akan mempelajari penggunaan signaling dalam Django, yang memungkinkan kita untuk menanggapi peristiwa yang terjadi pada model, seperti saat objek model disimpan, diperbarui, atau dihapus.

Apa itu Signaling?

Signaling adalah mekanisme di Django yang memungkinkan kita untuk mengirim dan menerima sinyal (signals) saat peristiwa tertentu terjadi pada model. Sinyal ini dapat digunakan untuk menjalankan kode tambahan secara otomatis setelah suatu peristiwa terjadi, tanpa perlu menerapkan logika tersebut secara eksplisit setiap kali.

Jenis-jenis Sinyal

Django menyediakan berbagai jenis sinyal yang dapat ditangani, termasuk pre_save, post_save, pre_delete, dan post_delete. Sinyal-sinyal ini dipancarkan sebelum atau setelah operasi CRUD dilakukan pada objek model.

Mendefinisikan Penangan Sinyal

Untuk menangani sinyal, kita perlu mendefinisikan fungsi yang akan dijalankan saat sinyal dipancarkan. Fungsi ini kemudian didaftarkan sebagai penangan sinyal menggunakan dekorator receiver.

from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import NamaModel

@receiver(post_save, sender=NamaModel)
def penangan_sinyal(sender, instance, created, **kwargs):
    if created:
        print("Objek model baru telah disimpan:", instance)
    else:
        print("Objek model telah diperbarui:", instance)Code language: CSS (css)
Mendaftarkan Penangan Sinyal

Setelah fungsi penangan sinyal didefinisikan, kita perlu mendaftarkannya dengan sinyal yang sesuai. Ini dapat dilakukan dalam file apps.py aplikasi kita atau dalam modul signals.py khusus untuk penangan sinyal.

# apps.py

from django.apps import AppConfig

class NamaAplikasiConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'nama_aplikasi'

    def ready(self):
        import nama_aplikasi.signals

Dengan menggunakan signaling dalam Django, kita dapat membuat aplikasi yang lebih fleksibel dan mudah diubah, karena logika tambahan dapat dijalankan secara otomatis setelah peristiwa tertentu terjadi pada model.

X. Pengelolaan Basis Data Terkait

Pada bagian ini, kita akan membahas teknik pengelolaan basis data terkait dalam Django, termasuk penggunaan perintah migrasi, fixture, dan penggunaan alat bantu pengelolaan basis data.

Perintah Migrasi

Perintah migrasi adalah alat yang kuat untuk mengelola perubahan skema basis data dalam proyek Django. Kita telah membahas penggunaan perintah makemigrations dan migrate sebelumnya untuk membuat dan menerapkan migrasi. Selain itu, kita juga dapat menggunakan perintah showmigrations untuk melihat status migrasi dalam proyek.

# Membuat migrasi baru
python manage.py makemigrations

# Menerapkan migrasi ke basis data
python manage.py migrate

# Menampilkan status migrasi
python manage.py showmigrationsCode language: CSS (css)
Penggunaan Fixture

Fixture adalah file JSON, XML, atau YAML yang berisi data awal untuk diisi ke dalam basis data. Fixture dapat digunakan untuk memasukkan data awal yang diperlukan dalam pengembangan atau untuk mengisi basis data dengan data tes.

# Memuat data dari fixture ke basis data
python manage.py loaddata nama_fixture

# Mengekspor data dari basis data ke fixture
python manage.py dumpdata nama_app > nama_fixture.jsonCode language: CSS (css)
Penggunaan Alat Bantu Pengelolaan Basis Data

Selain perintah bawaan Django, kita juga dapat menggunakan alat bantu pihak ketiga untuk pengelolaan basis data. Contoh alat bantu termasuk Django Extensions dan django-dbbackup, yang menyediakan fitur-fitur tambahan seperti backup, restore, dan inspeksi basis data.

# Instalasi django-extensions
pip install django-extensions

# Perintah untuk mengakses fitur tambahan
python manage.py dbbackup
python manage.py dbrestoreCode language: CSS (css)

Dengan memahami teknik pengelolaan basis data terkait ini, kita dapat mengelola basis data proyek Django dengan lebih efisien dan efektif.