網站開發專題 week5 自訂管理介面

接續前面 week4 的部分,首先建立環境並使用 week5 資料夾,並且啟動虛擬環境

前置準備

cd C:\django_projects
mkdir week5
cd week5
python -m venv env
.\env\Scripts\activate.bat

下載並將 week4 的成果放到 week5 目錄底下,點我下載

接著安裝 django

pip install django

啟動 django 伺服器並且測試功能是否正常,帳密為

  • 帳號: admin
  • 密碼: 123456
cd mysite
python manage.py runserver

http://127.0.0.1:8000/admin/

登入成功

使用 Ctrl + C 關閉啟動的伺服器

自定義管理介面

開啟 VSCODE

code .

原本的預設介面是日期在下面,現在要把它更改為日期在上面

開啟 polls/admin.py 檔案,貼上以下程式碼

from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)

現在呈現順序就會變成日期在下面

如果覺得這樣還不夠直覺的話,我們可以把它分群組

開啟 polls/admin.py ,貼上以下的程式碼

from django.contrib import admin
from .models import Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('問  題', {'fields': ['question_text']}),
('日期資訊', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
是不是變得更清楚了?

加入選項

開啟 polls/admin.py ,貼上以下的程式碼

from django.contrib import admin
from .models import Choice, Question
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('問  題', {'fields': ['question_text']}),
('日期資訊', {'fields': ['pub_date']}),
]
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)

儲存並且查看後台,會發現多了一個 Choice

按下右上角的 「新增 CHOICE」,並且按照下圖填寫,好了之後按下儲存

新增一個選項

開啟以下網址查看 http://127.0.0.1:8000/polls/2/

麥當勞已經新增進來了

但是有沒有感覺差了一點東西? 對,問題跟選項沒辦法一起關聯。

繼續開啟 polls/admin.py ,修改成以下程式碼

from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('問  題', {'fields': ['question_text']}),
('日期資訊', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)

開啟 http://127.0.0.1:8000/admin/polls/question/add/,新增一個問題

已經可以從這裡直接新增問題與選項了

開啟「今天中午吃什麼?」問題,將選項新增「牛肉湯」與「肯德基」

按下儲存,開啟 http://127.0.0.1:8000/polls/2/ 查看投票選項

選項已經新增進來了

但是這樣子的呈現方式,當需要新增大量選項的時候,就會發現占用了很多螢幕空間

開啟 polls/admin.py ,並且修改成以下程式碼

讓choice子選項變成表格式的呈現方式,更方便修改choice資料

from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('問  題', {'fields': ['question_text']}),
('日期資訊', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)

在問題總覽頁面顯示更多資訊

現在的問題總覽頁面是長這樣

修改 polls/admin.py ,讓問題總覽頁面呈現更多的欄位

from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
list_display = ('question_text', 'pub_date', 'was_published_recently')
fieldsets = [
('問  題', {'fields': ['question_text']}),
('日期資訊', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
多了發布日期與是否為最近的問題欄位

過濾、查詢功能

當你的問題有1000、2000 甚至更多,該如何快速找到需要的問題?

修改 polls/admin.py,加入日篩選器

from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
list_filter = ['pub_date']
list_display = ('question_text', 'pub_date', 'was_published_recently')
fieldsets = [
('問  題', {'fields': ['question_text']}),
('日期資訊', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)

現在它旁邊有可以用日來過濾資訊了,那麼我想搜尋問題的內容呢?

繼續修改 polls/admin.py 檔案

from django.contrib import admin
from .models import Choice, Question
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
search_fields = ['question_text']
list_filter = ['pub_date']
list_display = ('question_text', 'pub_date', 'was_published_recently')
fieldsets = [
('問  題', {'fields': ['question_text']}),
('日期資訊', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
SHXJ
Latest posts by SHXJ (see all)

在〈網站開發專題 week5 自訂管理介面〉中有 1 則留言

發佈留言