django學習(3)—書寫第一個應用(app)第二部分

來源:互聯網
上載者:User

這篇文章接第一部分,原文地址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。      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.