Slytherine’s Language to Extend User Model

Lama tidak ngeblog, sekali ngeblog tidak lama. Ini sikap.

Jadi ceritanya saya sedang belajar bahasa kaum slytherine, bahasa ular alias python. Berhubung saya pada dasarnya adalah desainer yang terjebak dalam dunia perkodingan, jadilah saya segera melirik framework-framework yang ada. Oh sebenarnya sih saya sempat bergulat dengan core python, raw coding atau apapun istilahnya lah ya, yang tidak pakai framework, tetapi ketika sudah sampai pada bagaimana memunculkan di website, maka framework adalah sahabat terbaik.

Framework yang sudah saya gunakan saat ini adalah django dan web.py. Django sepenuhnya karena mengejar rapid development, sementara web.py lebih ke kebutuhan untuk membuat API. API di django sempat terhambat oleh restriksi stdout di framework itu, sehingga saya berpindah ke web.py. Dan API tentu saja penting, mengingat negara kita termasuk produsen tembakau yang besar. hubungane opo mas? ngrokok ki butuh geni mas.

Mengenai bagaimana membuat API dengan web.py mungkin lain kali akan saya tuliskan, tentu saja tulisan seorang newbie lho ya, ndak ada ninja-ninjaannya. Paling nggak biar ndang rilis API gitu, mosok bertahun-tahun ngrilis API saja ndak jadi-jadi. Malah jadi sejarah.

User Model

Django sudah memiliki Core Module untuk manajemen User. Karena ini framework MVC, maka di dalamnya ada User Model. Nah, masalahnya di Core Module ini kadang ada field yang belum terfasilitasi, misalnya kita ingin memasukkan jenis kelamin atau usia. Di Indonesia ini penting, karena kadang kita harus menentukan menyapa dengan bapak atau ibu atau mas atau piyambakan mbak? 

Nah, untuk menambahkan hal ini, yang kita perlukan adalah membuat apps di dalam django, yang nantinya akan menjadi referensi field-field/modifikasi bagi struktur database User. Untuk contoh saja, mari kita namakan appsnya dengan “profil”.

$python manage.py startapp profil
									

Dengan perintah ini, django akan membuat satu folder dengan nama apps yang kita buat. Masuk ke dalam folder tersebut maka akan ada file models.py views.py dan lain-lain. Yang pertama harus kita ubah adalah models.py. Masukkan kode berikut ke dalamnya, perhatikan masalah tab ya, karena indent sangat berpengaruh dalam python.

rom django.db import models

# Create your models here.
from django.contrib.auth.models import User, UserManager

class UserProfile(models.Model):
    M = "M"
    F = "F"
    GENDER_CHOICES = (
        (M, "Male"),
        (F, "Female")
    )
    age = models.IntegerField()
    gender = models.CharField(max_length=2, choices=GENDER_CHOICES,default=M)
    user = models.OneToOneField(User, related_name='profile')

    objects = UserManager()

    def __str__(self):
        return "%s's Profile" % self.user
									

Di sini kita menambahkan field gender dan umur. Gender kita setup dengan format pilihan, agar tidak memusingkan script selanjutnya nantinya. Dan nantinya ketika kita syncdb, maka di database akan ada table baru  yang memuat struktur di models tersebut.

Langkah selanjutnya adalah membuat admin.py di folder yang sama. Fungsinya adalah untuk “mengganti” form user profile di backend django dan memasukkan field-field yang kita buat di models ini. Script di admin.py adalah seperti ini

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as OriginalUserAdmin
from profil.models import UserProfile
from django.contrib.auth. models import User

class UserProfileInline(admin.StackedInline):
    model = UserProfile
    can_delete = False

class UserAdmin(OriginalUserAdmin):
    inlines = [UserProfileInline, ]

try:
    admin.site.unregister(User)
finally:
    admin.site.register(User, UserAdmin)
									

Perhatikan, kita unregister dulu User Model Form, lalu kita register User dan UserAdmin. Dengan begini maka apps ini sudah siap untuk diimplementasikan. Yang perlu kita lakukan sekarang adalah memberitahu django agar memanggil apps ini dan sekaligus juga memasukkan setting AUTH_PROFILE_MODULE, agar merefer ke apps yang sudah kita buat.

Setting Django Project

INSTALLED_APPS = (
    ...
    'profil',
)

AUTH_PROFILE_MODULE = 'profil.UserProfile'
									

Yak selesai. Tinggal menjalankan command untuk syncdb.

$ python manage.py syncdb
									

Silakan runserver, lalu masuk ke halaman admin dan voila! Form user profile Anda berubah.

Namanya juga catatan newbie, maka silakan dicaci maki. Saya akan luweh 😀

 

vale, demi kesehatan

el rony, bermain-main dengan ular

3 thoughts on “Slytherine’s Language to Extend User Model

Leave a Reply

Your email address will not be published. Required fields are marked *