อัปเดตล่าสุด Feb. 16, 2023
ตัวอย่างหน้า 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 ด้วย online courses ที่จะพาคุณอัพสกิลและพัฒนาสู่การเป็นมืออาชีพ เรียนออนไลน์ เรียนจากที่ไหนก็ได้ พร้อมซัพพอร์ตหลังเรียน
เรียนเขียนโปรแกรม