快來新增一篇文章,將能打開個人文章頁服務!

[Django教學4]實用的Django Administration操作及客製化技巧

Photo by Tim Arterbury on Unsplash
Django Administration(管理員後台)是在建立Django專案時,預設提供的功能,在上面除了能夠進行基本的使用者集群組管理外,也可以在上面彈性的加入自己Django專案的資料模型(Model),來擁有屬於這個專案的後台,就算不使用Django預設的SQLite資料庫,而使用其它的資料庫,同樣可以使用,無須自己從頭開發,相當的強大。

本文將分享Django Administration(管理員後台)的操作介面,以及說明如何透Django專案中的admin.py檔案,來進行介面的客製化,重點包含:
  • Django Administration操作
  • Django admin.py檔案
  • Django Administration客製化資料表顯示欄位
  • Django Administration客製化資料表單欄位

一、Django Administration操作

要使用Django專案的Administration(管理員後台),首先,需註冊一個超級使用者(SuperUser)的帳號密碼,開啟Visual Studio CodeTerminal視窗,輸入以下指令:

python manage.py createsuperuser

執行結果
從執行結果可以看到,執行指令後,會逐步的設定管理者帳號、電子郵件及密碼,完成後,利用以下指令啟動本地端伺服器:

python manage.py runserver

執行結果
接著開啟瀏覽器,輸入執行結果的網址,並且加上/admin,即可看到Django Administration(管理員後台)的登入畫面,如下圖:
輸入剛剛所建立的超級使用者(SuperUser)帳號密碼後,可以看到Django專案中的使用者(Users)及群組(Groups)資料模型,如下圖:
以使用者(Users)資料模型為例,點擊Users後,可以看到其資料表,並且提供了查詢、新增、篩選及排序等操作,來管理Django專案的使用者,如下圖:

二、Django admin.py檔案

admin.py檔案主要就是用來註冊資料模型(Model)及客製化Django Administration(管理員後台)的顯示方式。現在,如果想要把Django專案中的應用程式(APP)資料模型(Model),加入到Django Administration(管理員後台),就可以透過應用程式(APP)底下的admin.py檔案來達成。

首先,開啟admin.py檔案,引用應用程式(APP) models.py中的LocationPosts資料模型,接著透過admin物件,將這兩個資料模型註冊到Django Administration(管理員後台)上,如下範例:
from django.contrib import admin
from .models import Location, Post

admin.site.register(Location)  #註冊至Administration(管理員後台)
admin.site.register(Post)  #註冊至Administration(管理員後台)
完成後,重新整理瀏覽器的Django Administration(管理員後台),即可看到Django應用程式(APP)LocationsPosts資料模型,如下圖:

三、Django Administration客製化資料表顯示欄位

Django Administration(管理員後台)有了應用程式(APP)的資料模型後,現在來試著新增一個景點位置,點擊Locations資料模型,接著選擇右上角的ADD LOCATION按鈕,填寫景點位置名稱,如下圖:
儲存後,可以看到如下圖的畫面:
由於習慣上來說,會想要將資料模型中的各個欄位顯示出來,所以畫面中的顯示介面看起來就較不友善,這時候同樣可以透過應用程式(APP)下的admin.py檔案來進行客製化,如下範例:
from django.contrib import admin
from .models import Location, Post

class LocationAdmin(admin.ModelAdmin):
    list_display = ('id', 'name')


admin.site.register(Location, LocationAdmin)  #註冊至Administration(管理員後台)
admin.site.register(Post)                    #註冊至Administration(管理員後台)
首先,建立LocationAdmin類別,繼承自ModelAdmin類別(Class),其中封裝了應用程式(APP)資料模型在Administration(管理員後台)的顯示方式及功能,所以,可以利用覆寫(Method Overriding) list_display屬性(Attribute)的方式,設定要顯示的欄位元組(Tuple),並且將LocationAdmin類別註冊至Administration(管理員後台)上。

除此之外,在應用程式(APP)下的models.py檔案中,Location資料模型類別,需覆寫(Method Overriding)  __str__特殊方法(Magic Method),來定義name欄位的字串顯示方式,如下範例:
# 景點位置
class Location(models.Model):
    name = models.CharField(max_length=255)
     
    def __str__(self):
        return self.name #顯示景點位置
最後重新整理瀏覽器的Administration(管理員後台)畫面,就可以看到如下的結果:
同樣的作法,設定Posts資料模型的資料表顯示欄位,如下範例:
from django.contrib import admin
from .models import Location, Post

class LocationAdmin(admin.ModelAdmin):
    list_display = ('id', 'name')

class PostAdmin(admin.ModelAdmin):
    list_display = ('subject', 'content', 'author', 'location')

admin.site.register(Location, LocationAdmin)  #註冊至Administration(管理員後台)
admin.site.register(Post, PostAdmin)  #註冊至Administration(管理員後台)

四、Django Administration客製化資料表單欄位

新增了景點位置後,接下來,在景點貼文的資料模型(Posts),也來新增一筆資料,如下圖:
由於在應用程式(APP)下的models.py中,定義了景點貼文資料模型(Posts)create_date(建立貼文日期)欄位,預設為當下時區的日期,所以在Django Administration(管理員後台)的新增畫面上,預設顯示當下的日期,如果不想要顯示這個欄位,可以在應用程式(APP)下的admin.py PostsAdmin類別中,透過覆寫(Method Overriding) exclude屬性(Attribute),設定不要顯示的欄位元組(Tuple),如下範例:
from django.contrib import admin
from .models import Location, Post

class LocationAdmin(admin.ModelAdmin):
    list_display = ('id', 'name')

class PostAdmin(admin.ModelAdmin):
    list_display = ('subject', 'content', 'author', 'location')
    exclude = ('create_date', )

admin.site.register(Location, LocationAdmin)  #註冊至Administration(管理員後台)
admin.site.register(Post, PostAdmin)  #註冊至Administration(管理員後台)
或是覆寫(Method Overriding) fields屬性(Attribute),設定要顯示的欄位元組(Tuple),如下範例:
from django.contrib import admin
from .models import Location, Post

class LocationAdmin(admin.ModelAdmin):
    list_display = ('id', 'name')

class PostAdmin(admin.ModelAdmin):
    list_display = ('subject', 'content', 'author', 'location')
    fields = ('subject', 'content', 'author', 'location')

admin.site.register(Location, LocationAdmin) #註冊至Administration(管理員後台) 
admin.site.register(Post, PostAdmin)  #註冊至Administration(管理員後台)
完成後,重新整理瀏覽器的Administration(管理員後台)畫面,再新增景點貼文時,create_date(建立貼文日期)欄位即沒有出現了,如下圖:

五、小結

透過今天的教學,各位應該可以感受到,當資料庫端建置完成後,除了可以透過Django所提供的Administration(管理員後台)介面來進行管理外,又可以客製化應用程式(APP)的資料模型在後台的顯示方式,非常的強大吧。如果在練習的過程中,有遇到任何問題,歡迎留言提問,我將盡力為各位解答。

如果您喜歡我的文章,請幫我按五下Like(使用GoogleFacebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。

有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊

你可能有興趣的文章

comment