本章主要是介紹如何利用django的admin site功能,根據(jù)定義的models,自動(dòng)生成可以CRUD的表單頁(yè)面。
一、自動(dòng)生成admin界面 1、激活admin site功能
修改"
mysite/settings.py"文件,在INSTALLED_APPS屬性去掉'django.contrib.admin'注釋。
修改"
mysite/urls.py"文件,去掉如下三行的注釋?zhuān)?br />
from django.contrib import admin
admin.autodiscover()
url(r'^admin/', include(admin.site.urls)),
執(zhí)行“
python manage.py syncdb”命令將該模塊映射到數(shù)據(jù)庫(kù)即可。
2、啟動(dòng)開(kāi)發(fā)服務(wù)器
運(yùn)行“
python manage.py runserver”啟動(dòng)server(默認(rèn)8000端口,端口有沖突重新制定,上篇提到過(guò)的)。
啟動(dòng)成功后,即可以瀏覽器打開(kāi)“http://127.0.0.1:8000/admin”,用之前創(chuàng)建的super user賬戶(hù)登錄了。
默認(rèn)還看不到polls,需要把它注冊(cè)到admin中。
在“mysite/polls”目錄下創(chuàng)建admin.py文件,內(nèi)容如下:
from django.contrib import admin
from polls.models import Poll
admin.site.register(Poll)
重啟服務(wù)器登錄,就可以看到根據(jù)Poll模板自動(dòng)生成的CRUD表單了。
3、自定義admin表單
多個(gè)屬性時(shí),如何控制各屬性顯示時(shí)的先后關(guān)系?
通過(guò)修改admin.py,來(lái)定義表單顯示的格式.
from django.contrib import admin
from polls.models import Poll, Choice
class ChoiceInline(admin.TabularInline): # admin.StackedInline
model = Choice
extra = 3
class PollAdmin(admin.ModelAdmin):
# fields = ['pub_date', 'question']
fieldsets = [
(None, {'fields': ['question']}),
('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
list_display = ('question', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
search_fields = ['question']
date_hierarchy = 'pub_date'
admin.site.register(Poll, PollAdmin)
admin.site.register(Choice)
屬性比較少時(shí),直接通過(guò)
"fields = ['pub_date', 'question']"來(lái)
確定先后順序即可.
而屬性比較多時(shí),則可通過(guò)設(shè)置
fieldsets來(lái)制定顯示效果.
效果如下圖:

Poll表單:
'Date information' 新表單標(biāo)題;
'collapse' django自帶的隱藏樣式;
“
inlines = [ChoiceInline]” 將Choice表單顯示在Poll中;
admin.StackedInline Choice屬性垂直顯示;
admin.TabularInline Choice屬性水平顯示;
Poll list記錄:

修改"
mysite/polls/models.py"文件,設(shè)置相關(guān)屬性的顯示樣式。
class Poll(models.Model):
question = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
def __unicode__(self):
return self.question
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'pub_date'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
list_display = ('question', 'pub_date', 'was_published_recently') 指定poll list記錄頁(yè)面顯示那些字段
list_filter = ['pub_date'] 右側(cè)的過(guò)濾器;django自帶日期選項(xiàng)
search_fields = ['question'] 上端搜索框;制定搜索的屬性范圍,like匹配
date_hierarchy = 'pub_date' 日期分層導(dǎo)航;根據(jù)記錄日期年月日自動(dòng)分類(lèi)
二、自定義admin外觀 創(chuàng)建“mysite/templates”目錄,修改"mysite/settings.py"文件,在TEMPLATE_DIRS屬性中配置該目錄位置。
進(jìn)入django安裝目錄(...\Python27\Lib\site-packages\django\contrib\admin\templates),把你需要修改的文件,拷貝到項(xiàng)目“mysite/templates”目錄下,修改成你需要的效果,服務(wù)器啟動(dòng)時(shí)會(huì)自動(dòng)從此處加載。