
接續前面 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


使用 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)
- 受保護的內容: NAS 版 Mathbot 管理網站與 Linebot 啟動方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 數學遊戲 - 2021 年 6 月 8 日








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