Django Admin ครบจบในบทความเดียว

   By: Withoutcoffee Icantbedev

   อัปเดตล่าสุด Feb. 16, 2023

Django Admin  ครบจบในบทความเดียว

Django มีอีกหนึ่งฟีเจอร์ที่มีมาให้แล้วเรียบร้อยคือหน้า Admin ซึ่งเรียกได้ว่าเป็นอีกหนึ่งฟีเจอร์ที่โดดเด่นที่สุดของ Django เป็นอีกหนึ่งตัวชูโรงเลยก็ว่าได้ ลองจินตนาการดูว่าถ้าเราต้องพัฒนาหน้า Admin แบบนี้ขึ้นมาเอง คงต้องใช้เวลานานมากแค่ไหน ? ดังนั้นจึงไม่แปลกเลยครับว่า ทำไม Django ถึงสามารถขึ้นโปรเจคท์ได้อย่างรวดเร็ว


ตัวอย่างหน้า Django Admin

ตัวอย่างหน้า Admin Site ของ Django


การใช้งาน Django Admin

ปกติ Django จะมีไฟล์ชื่อว่า  admin.py   มาให้แล้วเรียบร้อย ซึ่งก็แน่นอนว่าไฟล์นี้จะเอาไว้ใช้จัดการเกี่ยวกับหน้าแอดมิน ซึ่ง Admin ก็ถือว่าเป็นแอพที่มีมาให้แล้วของ Django แอพหนึ่ง ลองไปที่  settings.py   ด้านล่างจะเห็นว่า Admin ก็คือแอพหนึ่งแอพ

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',  # This
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog', # our app
]


และเมื่อไปที่   mysite/urls.py   ก็จะเห็นว่า Django Admin นั้นก็มี URL เป็นของตัวเอง

# mysite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls), # Django Admin
]

Note: ก่อนที่จะล็อกอินเข้าหน้าแอดมินได้ต้องทำการ Create superuser ก่อน


ต่อมาขั้นตอนทำให้หน้าแอดมินแสดงผล เราก็ทำได้โดยรีจิสเตอร์ model ที่เราได้สร้างไว้ใน  models.py   ก่อนหน้า โดยเราได้สร้างคลาส   Post   เอาไว้

# models.py
from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=80)
    short_description = models.TextField(max_length=160)
    body = models.TextField()
    date_created = models.DateTimeField(auto_now_add=True)
    date_updated = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return self.title


การใช้งานก็ไม่ได้มีอะไรซับซ้อน โดยอิมพอร์ต model ที่สร้างไว้เข้ามาใน    admin.py   ดังต่อไปนี้

# admin.py
from .models import Post


 แล้วทำการรีจิสเตอร์ model ใน admin ง่าย ๆ แบบนี้ด้วยเมธอด  register(Model)

# admin.py
from django.contrib import admin
from .models import Post

admin.site.register(Post)


การรีจิสเตอร์ Django model แบบเรียบง่าย

 

เราสามารถ custom เพิ่มคอลัมน์ได้ในแอดมินได้โดยการสร้างคลาสขึ้นมาใหม่ที่มีชื่อว่า    PostAdmin จากตอนแรกที่แสดงเพียงแค่  title เราสามารถเพิ่มฟีลด์วันที่เขียนบทความ   date_created   และวันที่อัปเดตบทความล่าสุด  date_updated   เพื่อให้โพสต์ที่แสดงนั้นดูง่ายมากยิ่งขึ้น โดยเรียกใช้งานตัวแปร  list_display 

และเปลี่ยนแปลงการรีจิสเตอร์นิดหน่อย โดยภายในฟังก์ชัน    จะรับอากิวเมนต์เข้ามาเพิ่มเป็น 2 ตัวจากตอนแรกที่รับเข้ามาตัวเดียวคือ Model

# admin.site.register(Model)
admin.site.register(Post)


การรีจิสเตอร์แบบใช้คลาส

# admin.site.register(Model, Class) รับอากิวเมนต์เข้ามาเพิ่มอีก 1 ตัวคือ Class ในที่นี้คือ PostAdmin
admin.site.register(Post, PostAdmin)


จะได้

# admin.py
from django.contrib import admin
from .models import Post

class PostAdmin(admin.ModelAdmin):
    list_display = ['title', 'date_created', 'date_updated']


admin.site.register(Post, PostAdmin)

Note: ใน   list_display  ต้องใส่ชื่อฟีลด์ให้ถูกต้องเหมือนกันกับที่ประกาศไว้ใน   models.py    ด้วย

จะได้หน้าแอดมินแบบนี้

แสดงเป็นคอลัมน์บน Admin แบบนี้จะดูง่ายมากยิ่งขึ้น


จบลงไปแล้วกับบทความ Django Admin หวังว่าคงจะเป็นประโยชน์นะครับ อย่าลืมติดตามเพจ devhub ด้วยนะครับ


จ้างโปรแกรมเมอร์หรือนักพัฒนาสำหรับโปรเจคท์ด้าน Software Development เช่น Website, Web App, Mobile App หรือสอนโค้ดดิ้ง คลาสอบรม?

เพิ่มเพื่อน LINE OA