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 中的某些注解符号,使其设定生效,如下图所示
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 runserver2.开启浏览器,输入网址http://127.0.0.1:8000/admin 后,将会看到下列画面
登入系统后你将会看到管理端的相关设定,其中包含群组(Groups),使用者(Users),应用程式网站(Sites)等。
三.让polls app在admin的管理介面中是可以编辑的
为了使Poll 物件在管理介面中出现,你必须建立一个admin.py档在polls的目录中,档案的内容如下:
from mysite.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)取代为
我们可以透过修改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" 来制作成有收放功能的集合项。
class PollAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ]
六.增加关联物件(related objects)
由models的结构中可以看出Poll可以关联到多个Choices,如何在管理端显示这些关系,我们可以在admin.py档中加入
由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项目来改变物件的显示格式
我们可以藉由在admin.py 的class 中增加list_display项目来改变物件的显示格式
class PollAdmin(admin.ModelAdmin):
# ...
list_display = ('question', 'pub_date', 'was_published_today')
另外我们可以在PollAdmin中加入list_filter使得在Poll的画面中多了过滤pub_date的功能
list_filter = ['pub_date']
过滤日期可选择的选项为Django预设选项"Any date," "Today," "Past 7 days," "This month," "This year." 。若欲增加搜寻的功能则可以增加search_fields
search_fields = ['question']
此外我们也可以加入
date_hierarchy = 'pub_date'
没有评论:
发表评论