Membuat Dynamic Slug

Pada modul ini kita akan membuat dynamic slug menggunakan signals. Pembahasan ini sebetulnya tidak berhubungan dengan REST API, namun lebih ke fitur untuk mengisi field slug secara otomatis.

Buat file baru pada direktori backend (gunakan direktori aplikasi Anda) dengan nama signals.py (nama file harus sesuai).

from django.db.models.signals import pre_save
from django.dispatch import receiver
from django.utils.text import slugify
from .models import Article

@receiver(pre_save, sender=Article)
def add_slug(sender, instance, *args, **kwargs):
    if instance and not instance.slug:
        slug = slugify(instance.title)
        instance.slug = slug

Kemudian buka file backend/apps.py, update code seperti berikut:

from django.apps import AppConfig


class BackendConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'backend'
    
    def ready(self):
        import backend.signals

Selanjutnya buka file backend/init.py, tambahkan code berikut:

default_app_config = "backend.apps.BackendConfig" 

Sekarang slug akan dibuat secara otomatis.

Anda dapat mencobanya melalui shell, panggil melalui command prompt:

$ python manage.py shell

Lalu dalam shell, jalankan perintah berikut: (tanda >>> jangan ditulis)

>>> from backend.models import Article
>>> article = Article(title="Second Title", description="Lorem ipsum second description")
>>> article.save()

Jika Anda periksa melalui web browser, sesuai ekspektasi, field slug sudah terisi secara otomatis.

Sharing is caring: