Django 學習手冊-如何建立專案(2)
Tutorial Part 2
此份說明將延續 Django 學習手冊-如何建立專案(1)
一.啟動管理端介面 admin site
預設Django admin是沒有啟動的,欲啟動Django admin必須做三件事
1.在 mysite/settings.py 中的 INSTALLED_APPS 中增加 "django.contrib.admin"
2.執行 python manage.py syncdb 以更新前項之設定
3.更新mysite/urls.py 中的某些註解符號,使其設定生效,如下圖所示
二.啟動管理端伺服器
三.讓polls app在admin的管理介面中是可以編輯的
為了使Poll 物件在管理介面中出現,你必須建立一個admin.py檔在polls的目錄中,檔案的內容如下:
你必須重新啟動伺服器才能看見它的改變
四.進階探索管理端的功能
經在polls加入admin.py 檔及重新啟動伺服器後,我們可以在管理端中看到出現polls的區塊
點選polls後可以看到在該應用程式中poll model中所儲存的所有資料項及可透過勾選來刪除資料項。另外也可以點選右上角 "Add poll" 來增加資料項或是點選資料項來進行修改。
五.客制化管理介面形式
我們可以透過修改 admin.py檔中的 admin.site.register(Poll) 來客制化model在管理介面中的顯示方式,將admin.site.register(Poll)取代為
重新啟動伺服器,將會看到下列畫面,pub_date與question的欄位順序會因此而改變。
另外,也可以用fieldssets的方式將欄位修改為
六.增加關聯物件(related objects)
由models的結構中可以看出Poll可以關聯到多個Choices,如何在管理端顯示這些關係,我們可以在admin.py檔中加入
儲存檔案後重新整理瀏覽器後,我們可以看到Polls的目錄中多了Choice的物件可選擇。
點選 Choices的 "Add"選項後,會發現可以選擇要歸類到哪一個Poll
若要縮短標題名稱可以用下列方式將was_published_today縮短成Published today?
一.啟動管理端介面 admin site
預設Django admin是沒有啟動的,欲啟動Django admin必須做三件事
1.在 mysite/settings.py 中的 INSTALLED_APPS 中增加 "django.contrib.admin"
2.執行 python manage.py syncdb 以更新前項之設定
3.更新mysite/urls.py 中的某些註解符號,使其設定生效,如下圖所示
from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Example: # (r'^mysite/', include('mysite.foo.urls')), # Uncomment the admin/doc line below and add 'django.contrib.admindocs' # to INSTALLED_APPS to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: (r'^admin/', include(admin.site.urls)), )
1.至mysite目錄下執行 python manage.py runserver
2.開啟瀏覽器,輸入網址 http://127.0.0.1:8000/admin 後,將會看到下列畫面
登入系統後你將會看到管理端的相關設定,其中包含群組(Groups),使用者(Users),應用程式網站(Sites)等。
三.讓polls app在admin的管理介面中是可以編輯的
為了使Poll 物件在管理介面中出現,你必須建立一個admin.py檔在polls的目錄中,檔案的內容如下:
from polls.models import Poll from django.contrib import admin admin.site.register(Poll)
你必須重新啟動伺服器才能看見它的改變
四.進階探索管理端的功能
經在polls加入admin.py 檔及重新啟動伺服器後,我們可以在管理端中看到出現polls的區塊
點選polls後可以看到在該應用程式中poll model中所儲存的所有資料項及可透過勾選來刪除資料項。另外也可以點選右上角 "Add poll" 來增加資料項或是點選資料項來進行修改。
五.客制化管理介面形式
我們可以透過修改 admin.py檔中的 admin.site.register(Poll) 來客制化model在管理介面中的顯示方式,將admin.site.register(Poll)取代為
class PollAdmin(admin.ModelAdmin): fields = ['pub_date', 'question'] admin.site.register(Poll, PollAdmin)
重新啟動伺服器,將會看到下列畫面,pub_date與question的欄位順序會因此而改變。
另外,也可以用fieldssets的方式將欄位修改為
class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date']}), ] admin.site.register(Poll, PollAdmin)
我們可以看到畫面中出現了一個Date information的欄位集合
當集合中的欄位數量變多時,我們可以利用Django 所提供的一個html class "collapse" 來製作成有收放功能的集合項。
當集合中的欄位數量變多時,我們可以利用Django 所提供的一個html class "collapse" 來製作成有收放功能的集合項。
class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ]
六.增加關聯物件(related objects)
由models的結構中可以看出Poll可以關聯到多個Choices,如何在管理端顯示這些關係,我們可以在admin.py檔中加入
from mysite.polls.models import Choice admin.site.register(Choice)
儲存檔案後重新整理瀏覽器後,我們可以看到Polls的目錄中多了Choice的物件可選擇。
Site administration
Groups | Add | Change |
---|---|---|
Users | Add | Change |
Choices | Add | Change |
---|---|---|
Polls | Add | Change |
Sites | Add | Change |
---|
點選 Choices的 "Add"選項後,會發現可以選擇要歸類到哪一個Poll
若要使Choices與Poll完全關聯,在新增Poll的畫面中可以順便增加Choice,可將原本admin.py修改為
class ChoiceInline(admin.StackedInline):
model = Choice
extra = 3
class PollAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
admin.site.register(Poll, PollAdmin)
它會使得在新增Poll時會出現3個Choice供填寫(inline related objects)
若點選已存在的Poll物件,則會另外再出現三個Choice供填寫,這就是extra = 3的設定。
為節省表格空間,我們可以修改 inline related objects表格的排列方式
class ChoiceInline(admin.TabularInline):
#...
修改後顯示如下
七.客制化管理端的物件顯示方式
我們可以藉由在 admin.py 的class 中增加 list_display項目來改變物件的顯示格式
class PollAdmin(admin.ModelAdmin):
# ...
list_display = ('question', 'pub_date', 'was_published_today')
若要縮短標題名稱可以用下列方式將was_published_today縮短成Published today?
def was_published_today(self): return self.pub_date.date() == datetime.date.today() was_published_today.short_description = 'Published today?'
另外我們可以在 PollAdmin中加入list_filter使得在Poll的畫面中多了過濾pub_date的功能
過濾日期可選擇的選項為Django預設選項"Any date," "Today," "Past 7 days," "This month," "This year." 。
若欲增加搜尋的功能則可以增加search_fields
此外我們也可以加入
list_filter = ['pub_date']
過濾日期可選擇的選項為Django預設選項"Any date," "Today," "Past 7 days," "This month," "This year." 。
若欲增加搜尋的功能則可以增加search_fields
search_fields = ['question']
此外我們也可以加入
date_hierarchy = 'pub_date'