這篇文章接第一部分,原文地址http://docs.djangoproject.com/en/1.2/intro/tutorial02/#intro-tutorial02
1.啟用admin網站。
要啟用admin網站需要做三件事情
1>在settings.py的INSTALLED_APPS裡面添加"django.contrib.admin"
2>運行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('', # Uncomment the next line to enable the admin: # (r'^admin/', include(admin.site.urls)),)
2> 運行命令 manage.py runserver 80,啟動伺服器,然後在地址欄中敲入http://127.0.0.1/admin/,我們將會看到admin的登入介面
如果按照第一部分做了,用第一部分的超級使用者名稱,密碼登入(如果第一部分沒有建立,也可以用manage.py createsuperuser建立一個使用者登入)。django的admin首頁如下:
3.將我們的poll app加入到admin管理介面來
在mysite/polls目錄下,建立admin.py檔案,使其內容如下
#coding:cp936from mysite.polls.models import Poll,Choicefrom django.contrib import adminadmin.site.register(Poll)admin.site.register(Choice)
這時候,就會在admin的管理介面出現對應的Poll和Choice
我們可以在這裡對我們的Poll和Choice進行增刪查改操作。
4。改制(定製)admin的form
我們接著修改mysite/polls/admin.py檔案,使其看起來如下:
#coding:cp936from mysite.polls.models import Poll,Choicefrom django.contrib import adminclass PollAdmin(admin.ModelAdmin): fields=["pub_date","question"]admin.site.register(Poll,PollAdmin)
修改前
看看我們修改後的效果
我們繼續用fieldset修改一下:
#coding:cp936from mysite.polls.models import Poll,Choicefrom django.contrib import adminclass PollAdmin(admin.ModelAdmin): fieldsets=[ (None,{'fields':['question']}), ('Date information',{'fields':['pub_date']}), ]admin.site.register(Poll,PollAdmin)
再看效果:
django在fieldsets裡面還提供了一個額外的class
#coding:cp936from mysite.polls.models import Poll,Choicefrom django.contrib import adminclass PollAdmin(admin.ModelAdmin): fieldsets=[ (None,{'fields':['question']}), ('Date information',{'fields':['pub_date'],"classes":['collapse']}), ]admin.site.register(Poll,PollAdmin)
看看效果
5。添加關聯對象
繼續修改admin.py,
from mysite.polls.models import Choiceadmin.site.register(Choice)
在上面的form中,Poll下拉式清單方塊是資料庫中所有的Poll,django知道在ForeignKey在admin當中用<select>顯示。
當我們點擊"Add Another",就會彈出一個"Add poll"視窗.如果你在這個快顯視窗添加了一個poll,django將會把這個poll儲存到資料庫並且作為choice關聯的poll。
這種顯示方式,跟我們的日常生活中不一樣,我們一般都是把poll列出,然後下面對應的choice資訊。我們現在更改一下admin.py
#coding:cp936from mysite.polls.models import Poll,Choicefrom django.contrib import adminclass ChoiceInline(admin.StackedInline): model=Choice #extra是再額外的列出的數目 extra=1 class PollAdmin(admin.ModelAdmin): fieldsets=[ (None,{'fields':['question']}), ('Date information',{'fields':['pub_date'],"classes":['collapse']}), ] inlines=[ChoiceInline]
還是直接看效果:
你也可以將admin.py裡面的StackedInline替換為TabularInline看看效果。
6。定製admin的change列表
我們首先看一下修改前是什麼模樣
修改admin.py
class PollAdmin(admin.ModelAdmin): ....... list_display=("question","pub_date","was_published_today")
看看效果
你可以點擊列頭以便用他們排序,但是was_published_today是一個例外,因為目前django還不知用方法進行排序。同時我們還注意到was_published_today列頭預設是方法名,但是我們可以通過在models.py裡面給這個方法一個short_description屬性來改變這種預設。
class Poll(models.Model): ........... def was_published_today(self): return self.pub_date.date()==datetime.datetime.today() was_published_today.short_description="Published today?"
我們還可以添加其他的來定製change列表.
如search_fields=['question',],list_filter=["pub_date"],將這些代碼添加到mysite/polls/admin.py
list_filter=['pub_date',]search_fields=['question',]date_hierarchy="pub_date"
效果如下
7。定義admin外觀
如果我們在自己的應用的管理介面也顯示"Django administration",那將會很滑稽。現在我們來修改一下這裡,我們需要做兩件事情
1>修改settings.py裡的TEMPLATE_DIRS,TEMPLATE_DIRS是一些目錄的元組,這些目錄是django模板的尋找路徑,我們修改
TEMPLATE_DIRS,使其內容如下:
TEMPLATE_DIRS = (
"d:/mysite/templates",
)
2>將base_site.html檔案(位於django的安裝路徑下django/contrib/admin/templates/admin/)拷貝到d:\mysite\templates\admin目錄下(注意,這裡有一個admin子目錄)。然後編輯該目錄下base_site.html即可
看效果:
同時我們也可以定製admin的index頁面,我們這次要做的是把django/contrib/admin/templates/admin/index.html拷貝到d:\mysite\templates\admin,然後進行編輯。原檔案當中有一個app_list,app_list就是在django所安裝的所有app。