Django Tutorial Indonesia: Model dan Admin

Django Tutorial Indonesia
Django Tutorial Indonesia: Model dan Admin

Django Tutorial Indonesia kali ini akan membahas seputar pembuatan Model dan Admin pada django. Tutorial ini adalah langkah awal bagi kita untuk membuat Model pertama Anda, dan mendapatkan pengenalan cepat mengenai web admin pada Django yang dibuat secara otomatis.



Setup Database Django Tutorial Indonesia

Sebelum melakukan setup database, kita harus menentukan apakah project yang kita buat kedepan berskala besar atau tidak. Jika project kita berskala besar, umumnya kita bisa menggunakan PostgreSQL, MySQL, MariaDB, ataupun Oracle.

Namun, jika project Anda berskala kecil atau Anda sedang belajar django untuk pertama kalinya, SQLite adalah pilihan terbaik karena kita tidak perlu menjalankan server secara terpisah. SQLite juga secara default disertakan dalam konfigurasi django, jadi Anda tidak perlu menginstal apa pun untuk mendukung database Anda. 

Jika Anda ingin menggunakan database lain, Anda bisa install modul-modul terkait yang diperlukan database (Baca: Cara Install Django) dan ubah beberapa value item di DATABASES  'default' di file mysite/settings.py, agar sesuai dengan pengaturan koneksi database Anda. 
  • ENGINE
    Contoh valuenya seperti berikut ini:
    'django.db.backends.sqlite3',  '
    django.db.backends.mysql',
    'django.db.backends.postgresql', atau
    'django.db.backends.oracle.
  • NAME
    Ini adalah nama database Anda. Jika Anda menggunakan SQLite, maka database akan menjadi sebuah file di komputer Anda. Artinya, Anda juga harus mendefinisikan file path secara lengkap. Secara default BASE_DIR / 'db.sqlite3' juga akan menyimpan file di direktori project Anda.

Struktur Object Database

Berikut struktur object database pada SQLite:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mydatabase',
    }
}
Jika Anda tidak menggunakan SQLite sebagai database Anda, maka pengaturan tambahan seperti USER, PASSWORD, dan HOST harus ditambahkan.
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'Nama Database',
        'USER': 'User Database',
        'PASSWORD': 'Password Database',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}
Anda juga perlu memperhatikan pengaturan pada INSTALLED_APPS yang berfungsi sebagai tempat untuk menyimpan nama aplikasi Django yang sedang di aktifkan. Secara default INSTALLED_APPS berisi:
  • django.contrib.admin: Web Admin.
  • django.contrib.auth: Sistem otentikasi..
  • django.contrib.contenttypes: Sebuah framework untuk content types.
  • django.contrib.sessions: Session framework.
  • django.contrib.messages: Framework yang bertugas dalam pengaturan message.
  • django.contrib.staticfiles: Framework untuk mengatur static files.
Setiap kita membuat app baru dengan menggunakan command dibawah, maka kita juga perlu untuk menambahkannya ke INSTALLED_APPS.
python manage.py startapp NamaApps

Dalam satu project setidaknya ada satu database, dan dalam tiap apps umumnya memiliki prefix table masing-masing sesuai dengan nama apps nya. Seperti pada tutorial sebelumnya, kita membuat apps yang bernama catalog, Jika kita membuat model bernama product, maka nama table nya adalah catalog_product
Baca: Django Tutorial Indonesia: Request dan Response (Part 1)

Untuk membuat default database pada django, Anda hanya perlu menjalankan command berikut ini:
python manage.py migrate

Perintah migrate melihat pengaturan INSTALLED_APPS dan juga membuat tabel database yang diperlukan sesuai dengan pengaturan database di file mysite/settings.py. Anda akan melihat sebuah message untuk setiap migrasi yang dijalankan. 

Apa Itu Models, Pada Django

Model di Django adalah satu-satunya sumber informasi definitif tentang data Anda. Model berisi karakteristik dan juga perilaku penting dari data yang Anda simpan. Django mengikuti prinsip DRY (Don't Repeat Yourself), yaitu untuk menyimpan model data Anda di satu tempat dan mengambil data dari tempat yang sama. Artinya, Django menghindari yang namanya redundansi pada setiap code.

Berdasarkan tutorial part 1 sebelumnya, kita telah membuat 1 apps bernama catalog. Kita akan membuat dua model, yaitu model catalog dan product. Anda bisa masuk ke file catalog/models.py, lalu tambahkan beberapa code dibawah ini di dalam file tersebut:
 
from django.db import models

# Create your models here.
class Catalog(models.Model):
    name = models.CharField(max_length=100)
    description = models.CharField(max_length=255, blank=True, null=True)
    is_active = models.BooleanField(default=True)
    is_default = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name


class Product(models.Model):
    catalog = models.ForeignKey('Catalog', related_name='products', on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    description = models.TextField(blank=True)
    price = models.DecimalField(max_digits=18, decimal_places=2, default=0)
    is_active = models.BooleanField(default=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name
Keterangan:
  • Di table product, kita juga menambah ForeignKey ke table catalog. Artinya, dalam setiap catalog bisa memiliki banyak product.
  • Kita juga bisa melakukan on/off pada catalog atau product dengan memanfaatkan field is_active 

Aktivasi Model Django Tutorial Indonesia

Sebelum melakukan database migration, kita perlu untuk mendaftarkan apps kita ke dalam INSTALLED_APPS di file mysite/settings.py.
INSTALLED_APPS = [
    'catalog',
    
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

Selanjutnya, kita akan membuat file migration dari penambahan model diatas. Caranya adalah dengan mengetik command berikut:
python manage.py makemigrations
Atau, untuk spesifik apps, kita bisa menjalankan command berikut
python manage.py makemigrations catalog

Jika file migration berhasil dibuat, Anda akan melihat informasi seperti berikut ini:
Migrations for 'catalog':
  catalog\migrations\0001_initial.py
    - Create model Catalog
    - Create model Product

Jika file migration gagal dibuat, bisa jadi salah satu masalahnya adalah karna terjadi conflict antar file migrations. Anda cukup menambahkan command --merge setelah makemigrations. Kira-kira akan jadi seperti ini:
python manage.py makemigrations --merge

File migrations akan terbuat secara otomatis. Isi dari file tersebut kira-kira seperti dibawah ini:
 
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Catalog',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=100)),
                ('description', models.CharField(blank=True, max_length=255, null=True)),
                ('is_active', models.BooleanField(default=True)),
                ('is_default', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
        ),
        migrations.CreateModel(
            name='Product',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255)),
                ('description', models.TextField(blank=True)),
                ('price', models.DecimalField(decimal_places=2, default=0, max_digits=18)),
                ('is_active', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('catalog', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='products', to='catalog.catalog')),
            ],
        ),
    ]
Langkah selanjutnya, Anda hanya perlu menjalankan command migrate seperti contoh diatas, yaitu python manage.py migrate. Jika berhasil, Anda akan melihat informasi berikut:
Operations to perform:
  Apply all migrations: admin, auth, catalog, contenttypes, sessions
Running migrations:
  Applying catalog.0001_initial... OK

Perintah migrate juga akan mengambil semua migrasi yang belum diterapkan. Django menyimpan dan melacak data migrasi yang sudah diterapkan di table khusus, yaitu django_migrations.

Belajar Django Web Admin

Membuat situs admin untuk menambah, mengubah, dan juga menghapus konten adalah pekerjaan membosankan yang tidak memerlukan banyak kreativitas. Untuk itu, Django sepenuhnya meng-otomatiskan pembuatan antarmuka admin berdasarkan model yang kita buat.

Belajar django di admin terdiri dari beberapa tahap, yaitu membuat superuser, menjalankan development server, dan masuk ke halaman admin.

Membuat User Pada Django Admin

Langkah pertama, kita akan membuuat user yang akan masuk ke halaman admin. Cara membuatnya, Anda hanya perlu menjalankan command berikut:
python manage.py createsuperuser
Isi field seperti username, email, password sesuai dengan kebutuhan Anda

Menjalankan Development Server Pada Django

Anda bisa menjalankan Development Server dengan command berikut
python manage.py runserver
Atau, Anda juga bisa define spesific port dengan menambahkan port value ke terminal Anda. Seperti contoh berikut ini:
python manage.py runserver 8001

Membuat Website Dengan Django Admin

Setelah server berhasil di jalankan, Anda bisa membuka browser Anda, lalu ketik domain berikut ke search bar browser Anda. http://127.0.0.1:8000/admin/. Angka 8000 umunya merupakan port default django, Anda bisa mengganti sesuai kebutuhan Anda, agar tidak bentrok dengan project lain yang menggunakan port yang sama.
Baca: Membuat Website Dengan Django
Anda akan diarahkan ke halaman login, dan masukkan username/password user yang telah Anda buat sebelumnya.
Django Website Tutorial
Django Website Tutorial (Halaman Login)

Setelah login berhasil, Anda akan diarahkan ke halaman admin dashboard. Secara default, django juga sudah menyediakan pengaturan group dan user yang bisa mengakses admin dashboard tersebut. Kita juga bisa mengatur hak akses, role, dan sebagainya sesuai kebutuhan kita.
Django Tutorial Indonesia
Django Website Tutorial - Admin Dashboard

Modifikasi Web Admin Django Tutorial

Aplikasi catalog yang kita buat sebelumnya, belum muncul di halaman admin. Untuk itu, kita perlu menambahkan Catalog dan Catalog Product object ke dalam admin interface. Caranya, Anda bisa masuk ke file catalog/admin.py, lalu tambahkan code berikut ini:
from django.contrib import admin

from .models import Catalog, Product

admin.site.register(Catalog)
admin.site.register(Product)
Jika tidak ada error, maka akan tampil seperti gambar dibawah ini:
Cara Membuat Website Dengan Python
Cara Membuat Website Dengan Python Django


Anda bisa meng-eksplorasi halaman admin dan juga memahami fitur-fitur yang django sediakan. . Berikut beberapa screenshot dalam add, edit halaman catalog dan product:
  • Add Catalog
    Django Admin
    Django Admin - Add Catalog

  • List Catalog
    Django Admin
    Django Admin - List Catalog

  • Add Product
    Django Admin
    Django Admin - Add Product

  • List Product
    Django Admin
    Django Admin - List Product

Keterangan:
  • Form sudah otomatis terbuat berdasarkan model Catalog dan Product
  • Tipe data pada model, merepresentasikan widget input HTML yang sesuai. Misal contoh diatas ada yang CharField dan BooleanField. CharField menampilkan input text dengan Max karakter sebanyak 255 atau tergantung max_length nya. BooleanField menampilkan input check-list yang bisa kita check/uncheck.
  • Save: Menyimpan perubahan dan kembali ke halaman list.
  • Tombol save and continue editing: Menyimpan perubahan dan juga memuat ulang halaman tersebut.
  • Save and add another: Menyimpan perubahan dan juga memuat form kosong baru untuk ditambahkan
  • Delete: Menampilkan halaman konfirmasi penghapusan.

Kita juga bisa melihat history dari setiap perubahan yang kita lakukan terhadap halaman tertentu. Sebagai contoh gambar berikut adalah history perubahan di halaman Product:
cara membuat website dengan python
History Product


Di artikel ini kita sudah membahas mengenai Django Tutorial Indonesia: Model dan Admin. Selanjutnya kita akan membahas tentang Django Tutorial Indonesia: Views dan Templates Part 1


Terimakasih, 


 tutorialsakti.com

LihatTutupKomentar