Django 5.2
Aries Pratama Wibowo22 Apr 2025

Django 5.2 Rilis! Dijamin Kerjaanmu Lebih Cepat Beres

Django, framework web Python favorit saya, kembali merilis versi terbarunya — Django 5.2 Dirilis! Rilis ini merupakan bagian dari siklus rilis reguler Django dan membawa sejumlah fitur baru yang menarik, selain itu Django 5.2 mengalami peningkatan performa, serta perbaikan bug penting.

Buat kamu yang sedang atau akan membangun aplikasi web menggunakan Django, ini saatnya untuk menyimak apa saja yang baru di versi 5.2! Kalau kamu baru berkenalan dengan Django, cek artikel berikut https://riespratama.com/django-framework-python-untuk-membuat-web-dengan-cepat/

1. Semua model diimport secara default dalam Django 5.2 shell

Kita tidak perlu mengimport tiap model untuk dapat menggunakannya dalam shell, yang berarti bahwa saat kamu membuka shell Django, semua model dari semua aplikasi di proyekmu langsung tersedia tanpa perlu di-import manual, praktis!

Django 5.2 Shell

⚠️ Tapi, Tunggu Dulu — Apa maksudnya “shell”?

Biasanya kamu menjalankan:

$ python manage.py shell

Lalu di dalamnya kamu biasa mengetik:

>>> from myapp.models import MyModel

Karena secara default, shell biasa tidak mengimpor model secara otomatis. Jadi kamu harus meng-import satu per satu.

🆕 Apa yang Berubah?

Mulai Django 5.2, jika kamu menggunakan:

$ python manage.py shell

📌 Maka semua model dari semua aplikasi akan otomatis di-import dan langsung bisa digunakan!

Contoh:

>>> Book.objects.all()
>>> User.objects.get(username="admin")

Kamu tidak perlu lagi menulis:

>>> from books.models import Book
>>> from django.contrib.auth.models import User

🔍 Bagaimana Cara Django Tahu Model-nya?

Django memindai semua aplikasi terdaftar di INSTALLED_APPS, lalu mengambil semua model yang didefinisikan, dan mengimpor mereka saat shell dimulai.


✅ Manfaat Fitur Ini

  • ⚡ Lebih cepat eksplorasi data di shell
  • 🧪 Praktis untuk testing, debugging, dan eksperimen cepat
  • 💬 Menyederhanakan workflow saat bekerja di development

📌 Catatan Tambahan

Sebelum Django 5.2, cara ini hanya tersedia lewat shell_plus dari library eksternal django-extensions.

Sekarang, fitur itu sudah built-in langsung di Django, tanpa perlu install apa-apa lagi.


✨ Kesimpulan

Django 5.2 menghadirkan peningkatan produktivitas dengan mengimpor semua model secara otomatis saat masuk ke shell, jadi kamu bisa langsung bekerja tanpa setup tambahan.

2. Django 5.2 mendukung composite primary keys

Django 5.2 Primary Keys

⚠️ Apa itu Composite Primary Key?

Secara sederhana:
Composite primary key adalah gabungan dua atau lebih kolom dalam sebuah tabel database yang secara bersama-sama membentuk primary key.

Contoh Konsep:
Bayangkan kamu punya model Enrollment yang mencatat siswa mengikuti mata kuliah:

class Enrollment(models.Model):
    student = models.ForeignKey(Student, on_delete=models.CASCADE
    course = models.ForeignKey(Course, on_delete=models.CASCADE)

Secara logis, satu siswa hanya bisa ikut satu mata kuliah satu kali, jadi kombinasi student + course harus unik, dan bisa dianggap sebagai primary key. Itulah composite primary key.

🆕 Apa yang Baru di Django 5.2?

Dulu, Django tidak mendukung composite primary key secara resmi. Para developer harus mengakali dengan:

  • Gunakan field unik kombinasi (unique_together)
  • Atau pakai primary key manual dan override method ORM (yang cukup ribet)

❗ Sekarang, mulai Django 5.2, kamu bisa menggunakan class CompositePrimaryKey untuk mendefinisikan primary key dari gabungan beberapa field.

🔧 Contoh Penggunaan di Django 5.2

from django.db import models
from django.db.models import CompositePrimaryKey

class Enrollment(models.Model):
    student = models.ForeignKey("Student", on_delete=models.CASCADE)
    course = models.ForeignKey("Course", on_delete=models.CASCADE)

    class Meta:
        constraints = [
            CompositePrimaryKey("student", "course"),
        ]

Dengan begitu:

  • Tidak ada id default
  • Django tahu bahwa kombinasi student dan course adalah primary key

✅ Manfaat Fitur Ini

  • Menyederhanakan model untuk use case tertentu (misal: tabel relasi seperti join table)
  • Lebih cocok dengan struktur tabel yang sudah ada di database lama (legacy DB)
  • Menjaga integritas data tanpa perlu workaround

📌 Catatan

Fitur ini masih relatif baru, jadi:

  • Beberapa bagian ORM bisa punya keterbatasan (misalnya: .get() atau .update() mungkin perlu penyesuaian)
  • Migration akan berbeda karena tidak ada id otomatis
  • Belum semua third-party package siap dengan composite primary key

✨ Kesimpulan

Django 5.2 membuka pintu untuk model data yang lebih kompleks dan realistis dengan mendukung composite primary keys secara native lewat CompositePrimaryKey.

Kalau kamu biasa bekerja dengan database relasional yang ketat atau sistem legacy, ini bisa menghemat banyak waktu dan kode ekstra.

3. Override BoundField sekarang lebih mudah di Django 5.2

⚠️ Apa itu BoundField?

Di Django forms, setiap field yang sudah "terikat" ke data dan form disebut BoundField. Ini adalah objek yang dipakai saat kamu menulis di template:

{{ form.username }}
{{ form.email.label }}
{{ form.password.errors }}

Setiap elemen {{ form.field_name }} itu sebenarnya adalah objek BoundField, bukan field aslinya (CharField, EmailField, dll.).

🔧 Apa Maksud “Overriding a BoundField” di Django 5.2?

Kadang kamu ingin mengubah perilaku BoundField, misalnya:

  • Tambahkan class CSS khusus
  • Ubah cara label dirender
  • Tambahkan ikon atau wrapper di sekitar field
  • Atau ubah method seperti as_widget() atau label_tag()

Sebelumnya, overriding BoundField cukup sulit, kamu harus membuat custom subclass BoundField, lalu secara manual ganti cara form dirender.

🆕 Apa yang Baru di Django 5.2?

Mulai Django 5.2, cara override BoundField jadi lebih fleksibel dan mudah. Kamu sekarang bisa menentukan custom BoundField di tiga level berbeda:

1. Level Form

Override hanya berlaku untuk satu form saja:

class MyBoundField(BoundField):
    def label_tag(self, contents=None, attrs=None, label_suffix=None):
        return super().label_tag(contents=f"🔒 {self.name}")

class MyForm(forms.Form):
    field = forms.CharField()

    default_bound_field_class = MyBoundField

2. Level Field

Berlaku untuk satu field saja:

class MyCharField(forms.CharField):
    bound_field_class = MyBoundField

3. Level Proyek (Global)

Berlaku untuk semua field di semua form dalam satu project. Cukup set di settings.py:

FORM_DEFAULT_BOUND_FIELD = 'myapp.forms.MyBoundField'

✅ Manfaat Utama

  • Mudah menyesuaikan tampilan dan perilaku field di form HTML
  • Tidak perlu override Form.render() secara manual
  • Bisa buat tampilan field lebih konsisten di seluruh proyek (misalnya: untuk dark mode, framework CSS, dsb.)

✨ Kesimpulan

Sekarang kamu bisa mengubah cara Django merender setiap field di form dengan cara yang lebih sederhana dan terstruktur, langsung dari level form, field, atau global project.

Ini sangat bermanfaat kalau kamu ingin custom UI/UX form, integrasi dengan Tailwind, Bootstrap, atau sistem desain buatanmu sendiri.

Lebih jauh tentang Django 5.2 bisa ditemukan di dokumentasi resmi di : https://docs.djangoproject.com/en/5.2/

Jadi yang paling update, langganan gratis artikel dari riespratama.com langsung ke inbox-mu

Baca Juga:

Koneksikan Android dan Linux via ADB

Bagi pengguna Linux (pada contoh ini Ubuntu), Android Debug Bridge (ADB) adalah salah satu alat wajib jika ingin berinteraksi langsung […]

Read More
Extend Storage Volume Size di Ext4 Setelah Install Zentyal

Beberapa hari lalu saya membuat setup untuk active directory server dan file server dengan menggunakan Zentyal. Sistem disetup di atas […]

Read More
Lima Langkah Mudah Setup Django di Ubuntu

Untuk memulai development aplikasi dengan Django, berikut langkah-langkahnya 1. Cek system requirements Sebelum menginstall Django, kamu perlu tau versi Django […]

Read More
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram
×