2012年5月19日

Django 学习手册-如何建立专案(2)-Tutorial Part 2


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 后,将会看到下列画面

Django admin login screen

登入系统后你将会看到管理端的相关设定,其中包含群组(Groups),使用者(Users),应用程式网站(Sites)等。


Django admin index page


三.让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的区块
Django admin index page, now with polls displayed

点选polls后可以看到在该应用程式中poll model中所储存的所有资料项及可透过勾选来删除资料项。另外也可以点选右上角"Add poll" 来增加资料项或是点选资料项来进行修改。


Polls change list page

Editing form for poll object


五.客制化管理介面形式

我们可以透过修改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的栏位顺序会因此而改变。



Fields have been reordered
另外,也可以用fieldssets的方式将栏位修改为

class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Poll, PollAdmin)

我们可以看到画面中出现了一个Date information的栏位集合
Form has fieldsets now


当集合中的栏位数量变多时,我们可以利用Django 所提供的一个html class "collapse" 来制作成有收放功能的集合项。
class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
Fieldset is initially collapsed


六.增加关联物件(related objects)

由models的结构中可以看出Poll可以关联到多个Choices,如何在管理端显示这些关系,我们可以在admin.py档中加入

from mysite.polls.models import Choice

admin.site.register(Choice)
储存档案后重新整理浏览器后,我们可以看到Polls的目录中多了Choice的物件可选择。




Site administration


Auth
GroupsAddChange
UsersAddChange
Polls
ChoicesAddChange
PollsAddChange
Sites
SitesAddChange












点选Choices的"Add"选项后,会发现可以选择要归类到哪一个Poll

Choice admin page

若要使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)

Add poll page now has choices on it


若点选已存在的Poll物件,则会另外再出现三个Choice供填写,这就是extra = 3的设定。为节省表格空间,我们可以修改inline related objects表格的排列方式


class ChoiceInline(admin.TabularInline):
    #...
修改后显示如下

Add poll page now has more compact choices



七.客制化管理端的物件显示方式

我们可以藉由在admin.py 的class 中增加list_display项目来改变物件的显示格式


class PollAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question', 'pub_date', 'was_published_today')

Polls change list page, updated

另外我们可以在PollAdmin中加入list_filter使得在Poll的画面中多了过滤pub_date的功能


list_filter = ['pub_date']

Polls change list page, updated




过滤日期可选择的选项为Django预设选项"Any date," "Today," "Past 7 days," "This month," "This year." 。若欲增加搜寻的功能则可以增加search_fields


search_fields = ['question']

此外我们也可以加入

date_hierarchy = 'pub_date'

没有评论:

发表评论

BlogAD