Django入門-從0開始編寫一個投票網(wǎng)站(四)(完結)

接上一篇Django入門-從0開始編寫一個投票網(wǎng)站(三)
開始筆記的part7-8。

part 7

  • 自定義admin的表單
    在admin.py里注冊了Question以后django默認會生成一個表單樣式厚满,如果需要自定義這個樣式的話校坑,在polls/admin.py里:
    from django.contrib import admin
    from .models import Question
    class QuestionAdmin(admin.ModelAdmin):
          fields = ['pub_date', 'question_text']
    
    admin.site.register(Question, QuestionAdmin)
    

    可以看到結果是這樣的:
    customize_admin_01.png

    這個看著不明顯栖茉,那就這樣:

    class QuestionAdmin(admin.ModelAdmin):
          fieldsets = [
              (None, {'fields': ['question_text']}),
              ('Data information', {'fields': ['pub_date']}),
          ]
    
    customize_admin_02.png

  • 添加關聯(lián)對象
    現(xiàn)在admin頁面沒有關聯(lián)到問題的答案選項楼咳,我們關聯(lián)一下以清,在polls/admin.py里:
    from django.contrib import admin
    from .models import Choice, Question
    class ChoiceInline(admin.StackedInline):
          model = Choice
          extra = 3
    
    class Question(admin.ModelAdmin):
          fieldsets = [
              (None, {'fields': ['question_text']}),
              ('Date information', {'fields': ['pub_date'], 'classes':['collapse']}),
          ]
          inlines = [ChoiceInline]
    admin.site.register(Question, QuestionAdmin)
    

    上面的代碼告訴django:“Choice 對象會在Question的頁面被編輯凸舵。默認會提供3個choice選項”。運行并嘗試添加一個問題:
    add_choice_01.png

    這里有3個默認選項外潜,這3個不能被移除原环。
    這樣有個小問題:占用了很長的屏幕,換一個顯示方式:

    class ChoiceInline(admin.TabularInline):
    

重新加載一下是這樣:
add_choice_02.png

簡潔了不少处窥。


  • 自定義修改列表嘱吗,在admin.py里:
    class QuestionAdmin(admin.ModelAdmin):
          list_display = ('question_text', 'pub_date', 'was_published_recently')
    
    運行可以看到:
    change_list_01.png

    點擊每一列titile可以排序。
    你可以給was_published_recently方法添加一點屬性
    class Question(models.Model):
          def was_published_recently(self):
              now = timezone.now()
              return now - date time.timedelta(days=1) <= self.pub_date <= now
          was_published_recently.admin_order_field = 'pub_date'
          was_published_recently.boolean = True
          was_published_recently.short_description = 'Published recently?'
    
    關于更多的方法屬性滔驾,可以參看這里
    在側邊欄添加一個'filter'來增加根據(jù)日期篩選的功能:在QuestionAdmin里添加list_filter
    list_filter = [`pub_date`]
    

    最終結果是這樣:
    change_list_02.png

    再來添加一個搜索框:

    search_fields = ['question_text']
    
    自己看看結果谒麦。

  • 自定義admin界面的外觀。目前admin的界面的左上角的title一直是Django administration哆致,如果需要自定義的話绕德。在settings.py里:
    TEMPLATES = [
        {
              'BACKEND': 'django.template.backends.django.DjangoTemplates',
              'DIRS': [os.path.join(BASE_DIR, 'templates')],
              'APP_DIRS': True,
              'OPTIONS': {
                  'context_processors': [
                      'django.template.context_processors.debug',
                      'django.template.context_processors.request',
                      'django.contrib.auth.context_processors.auth',
                      'django.contrib.messages.context_processors.messages',
                  ],
              },
        },
    ]
    
    DIRS是在加載django模版時的一個文件檢索列表。
    現(xiàn)在在templates文件夾里新建一個admin的文件夾摊阀,然后從django源文件的django/contrib/admin/templates里找到admin/base_site.html耻蛇,拷貝到剛剛創(chuàng)建的admin文件夾里踪蹬。(如果不知道django源文件在哪,運行python -c "import django; print(django.__path__)")臣咖,修改{{ site_header|default:_('Django administration') }}改成你需要的名字跃捣,更改完以后長這樣:
    {% block branding %}
    <h1 id="site-name"><a href="{% url 'admin:index' %}">Polls Administration</a> 
    </h1>
    {% endblock %}
    
    django所有的admin模版都能自定義,做法都跟base_site.html一樣:從源文件里拷貝對應的文件到你定義的文件夾里然后修改夺蛇。

完結撒花疚漆,就是這么突然。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末刁赦,一起剝皮案震驚了整個濱河市娶聘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌甚脉,老刑警劉巖丸升,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異牺氨,居然都是意外死亡发钝,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門波闹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人涛碑,你說我怎么就攤上這事精堕。” “怎么了蒲障?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵歹篓,是天一觀的道長。 經(jīng)常有香客問我揉阎,道長庄撮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任毙籽,我火速辦了婚禮洞斯,結果婚禮上,老公的妹妹穿的比我還像新娘坑赡。我一直安慰自己烙如,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布毅否。 她就那樣靜靜地躺著亚铁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪螟加。 梳的紋絲不亂的頭發(fā)上徘溢,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天吞琐,我揣著相機與錄音,去河邊找鬼然爆。 笑死站粟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的施蜜。 我是一名探鬼主播卒蘸,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼翻默!你這毒婦竟也來了缸沃?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤修械,失蹤者是張志新(化名)和其女友劉穎趾牧,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肯污,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡翘单,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蹦渣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哄芜。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖柬唯,靈堂內(nèi)的尸體忽然破棺而出认臊,到底是詐尸還是另有隱情,我是刑警寧澤锄奢,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布失晴,位于F島的核電站,受9級特大地震影響拘央,放射性物質(zhì)發(fā)生泄漏涂屁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一灰伟、第九天 我趴在偏房一處隱蔽的房頂上張望拆又。 院中可真熱鬧,春花似錦袱箱、人聲如沸遏乔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盟萨。三九已至,卻和暖如春了讨,著一層夾襖步出監(jiān)牢的瞬間捻激,已是汗流浹背制轰。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胞谭,地道東北人垃杖。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像丈屹,于是被迫代替她去往敵國和親调俘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容