Mengenal Django Admin

Jika tulisan tentang django sebelumnya banyak tentang membuat REST API menggunakan DRF, di tulisan ini saya ingin mencatat tentang betapa menyenangkannya django admin, dashboard yang sudah disediakan oleh django.

Salah satu hal yang bikin saya menyukai django admin adalah, banyak hal yang sudah di-handle oleh django admin, auth, acl (access control list ), crud yang besert validasinya.  Selain itu django admin pun bisa dikembangkan lebih lanjut bahkan dengan effort yang tidak terlalu besar. Jadi langsung saja.

Saya langsung ke bagian app, install django dan membuat superuser sila tengok postingan ini dan ini

Install APP dan Daftarkan ke Admin.

Mari buat 1 app dengan nama tasks, di dalam folder django jalankan perintah berikut:

./manage.py startapp tasks

Lalu buka model tasks dan tambahkan sebagai berikut

from django.db import models

# Create your models here.
class Tasks(models.Model):
    title = models.CharField(max_length=75)
    deadline = models.DateTimeField()
    weight = models.PositiveIntegerField()
    status = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateField(auto_now=True)
    def __str__(self):
        return self.title

Daftarkan app di konfigurasi settings.py

INSTALLED_APPS = [
    'tasks',
    ....other app
]

Selanjutnya buat berkas migration

./manage.py makemigrations tasks

jalankan migrate agar terbuat struktur table-nya

./manage.py migrate tasks

Silahkan cek di database masing-masing, seharusnya table task sudah terbuat.

Selanjutnya daftarkan app kedalam django admin, caranya buka “tasks/admin.py” dan tambahkan kode seperti berikut

from django.contrib import admin
from .models import Tasks

admin.site.register(Tasks)

Masuk ke halaman Admin dan seharusnya tampilannya seperti berikut:

Dashboard admin Home

 

Kalau kita klik menu “Taskss” kita akan diarahkan ke halaman list tasks

Di pojok kanan atas ada tombol “Add Tasks” jika diklik akan masuk ke form insert, silahkan isi data beberapa, saya belum mau catat tentang form saya sedang ingin mencatat bagian list.

Oke saya anggap sudah memiliki beberapa data dan hasilnya di dalam list akan seperti berikut

Kustomisasi List

Tulisan ini saya ingin mencatat bagian ini, karena dengan effort yang tidak terlalu besar kita bisa “kustomisasi” bagian list sesuai dengan yang kita inginkan.

Tambahan Field

Secara default yang muncul di list adalah nilai yang kita kembalikan di method “__str__” dalam model, kebetulan yang saya kembalikan adalah “title” maka yang muncul adalah judul tasknya. Bagaimana jika ingin menambahkan informasi field lainnya, seperti deadline dan status, serta bobot(weight) misalnya. Caranya mudah, buka admin.py dan ubah mejadi berikut

from django.contrib import admin
from .models import Tasks
# Register your models here.

@admin.register(Tasks)
class TasksAdmin(admin.ModelAdmin):
    list_display =(
        'title',
        'deadline',
        'weight',
        'status'
    )

Hasilnya menjadi

Deadline yang merupakan objek datetime dimunculkan langsung berupa waktu, dan status berupa boolean langsung dimunculkan berupa bentuk ikon ceklis atau tidak.

Paginasi

Setahu saya django admin secara default menampilkan 100 daftar. Namun kita bisa ubah dengan batas semau kita. Ubah kembali admin.py menjadi

from django.contrib import admin
from .models import Tasks
# Register your models here.

@admin.register(Tasks)
class TasksAdmin(admin.ModelAdmin):
    list_display =(
        'title',
        'deadline',
        'weight',
        'status'
    )
    list_per_page = 2

Hasilnya

Pencarian

Selanjutnya jika ingin menambahkan pencarian cukup ubah kembali berkas admin.py menjadi:

@admin.register(Tasks)
class TasksAdmin(admin.ModelAdmin):
    list_display =(
        'title',
        'deadline',
        'weight',
        'status'
    )
    list_per_page = 2
    search_fields = ('title', )

Hasilnya

Perintah di atas melakukan pencarian ke field “title”, jika mau menambahkan field lainnya seperti search_fields = ('field', "field_1","field_2")

Sedangkan untuk urutan bisa tambahkan kode seperti berikut untuk urutan ascendingordering = ('weight',) dan seperti ini ordering = ('-weight',) untuk descending

 

Menambahkan filter spesifik seperti filter status true/false lebih cocok menggunakan  filter lainnya bukan text, bisa ditambahkan dengan kode list_filter = ['status'] dan hasilnya

 

Di samping kana ada filter baru untuk filter by status. Selain filter, kita bisa seperti grouping terutama dengan tanggal bisa tambahkan seperti berikut date_hierarchy = 'created_at' dan hasilnya

Sehingga keseluruhan kode yang dibuat untuk tampilan di atas:

from django.contrib import admin
from .models import Tasks
# Register your models here.

@admin.register(Tasks)
class TasksAdmin(admin.ModelAdmin):
    list_display =(
        'title',
        'deadline',
        'weight',
        'status'
    )
    list_per_page = 2
    search_fields = ('title',)
    ordering = ('weight',)
    list_filter = ['status']
    date_hierarchy = 'created_at'

 

Referensi:

https://docs.djangoproject.com/en/3.0/ref/contrib/admin/