Sawijining model user khusus ngganteni User bawaan Django supaya cocog karo kabutuhan aplikasine — nambah field, ngubah identitas login (contone email tinimbang username), utawa nyesuaikan tingkah laku. Khasanah sing kritikal lan asring diulang-ulang: siapake model user khusus ing wiwitan banget saka proyek, sanajan durung butuh owah-owahan, amarga ngubah biyen kuwi abot rasane.
Napa: User bawaan iku terbatas lan angel diubah biyen
The default User has fixed fields (username, email, first/last name) and uses
USERNAME as the login field. Real apps often need:
✓ Email-based login (no username)
✓ Extra fields (phone, avatar, role, preferences) on the user itself
✓ Custom authentication behavior
Alesan kritikal supaya bisa rampung NGAREP
⚠️ Changing the user model AFTER migrations exist is VERY hard — the User model is
referenced by auth, admin, sessions, foreign keys throughout the database.
Swapping it later requires complex, risky data migrations.
→ ALWAYS define a custom user model at project START (before the first migration),
even an empty one, so you can extend it freely later. Django's docs strongly
recommend this for EVERY new project.
Iki pelajaran praktis sing paling penting: ora mbeneri-beneri apa-apa kanggo siapake model user khusus ing dina kapisan, nanging nambah model user menyang proyek sing wis berjalan iku pekerjaan gedhe, ruwet — saengga sampeyan nindakake ing ngarep minangka insuransi.
Kepiye: nambah AbstractUser (cara sing gampang)
# models.py — add fields, keep Django's auth behavior
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
phone = models.CharField(max_length=20, blank=True)
avatar = models.ImageField(upload_to="avatars/", blank=True)
is_premium = models.BooleanField(default=False)
# settings.py — tell Django to use it
AUTH_USER_MODEL = "myapp.User"
AbstractUser njaga kabeh field bawaan Django lan mesin authentifikasi — sampeyan mung nambah field. Cara sing paling simpel lan umum.
Kepiye: AbstractBaseUser (kontrol penuh, contone login email)
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
USERNAME_FIELD = "email" # log in with EMAIL instead of username
REQUIRED_FIELDS = []
objects = CustomUserManager() # a manager defining create_user/create_superuser
AbstractBaseUser menehi kontrol penuh atas model user (contone mbusak username kabeh kanggo login email ae) — luwih akeh kerja, nanging fleksibilitas maksimal.
Ngrujuk model user kanthi bener
from django.conf import settings
from django.contrib.auth import get_user_model
# in models — reference via settings.AUTH_USER_MODEL
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
# in code — get the active user model dynamically
User = get_user_model() # NOT a direct import of the default User
Ber-ajar ngrujuk model user liwat settings.AUTH_USER_MODEL (ing model) lan get_user_model() (ing kode), ora ngimpor User bawaan langsung — supaya kode sampeyan bisa nyambut karo model khusus.
Napa iki penting
Nggunakake model user khusus iku kawruh sing penting karo pelajaran praktis kritikal, sering ditekanake, sing kudu diapusi saben developer Django: siapake ing wiwitan nggonmu saben proyek.
Alasan iki seneng banget karena asimetri susah sing parah — nemtokake model user khusus ing dina kapisan (malah subclass AbstractUser kosong) ora mbeneri-beneri apa-apa lan menehi fleksibilitas berharga, dene ngalih menyang model user khusus sawisé proyek duwe migrasi lan data iku abot rasane lan mbebayani, sebab User model dipundut ing jero Django (authentifikasi, admin, session) lan dening foreign key ing saindhenging database, mbutuhake migrasi data rumit lan ruwet kanthi rupa-rupa carane.
Iki sebabe dokumentasi Django dhewe ngrewangi model user khusus kanggo saben proyek anyar, sukses utawa ora — iku insuransi supaya aja mimpi buruk babagan migrasi biyen.
Ligandane karo kaca-kaca pitutur wektu iki, mangerteni kepiye gumawa model user khusus — AbstractUser kanggo tinambah field wae lan tetep Django auth behavior (kasus umum, gampang), lan AbstractBaseUser kanggo kontrol penuh kaya login berbasis email (mbusak username kabeh) — ana harga kanggo motret prasyarat aplikasi real (field user ekstra, identitas login alternatif, auth khusus).
Sama pentinge iku njaga kaetosan ngrujuk model user kanthi bener (liwat settings.AUTH_USER_MODEL lan get_user_model(), ora ngimpor langsung) supaya kode bisa nyambut karo proyek model user apa wae sing disiksa.
Karena ampir saben aplikasi real duwe kabutuhan user khusus luwih tianggen Django bawaan (lan malah sing ora duwe bisa keuntungan saka fleksibilitas), lan karena biaya ora siapake iki ngarep abot rasane, mangerteni model user khusus — luwih-luwih imperatif siapake ing wiwitan proyek — iku kawruh penting, praktis-kritikal, ngalang-alang kesalahan proyek umum lan serius, ndadak iku pitutur-pitutur Django best-practice sing asring kasebut.
