02.Django後臺和資料庫的設計

Thinkgamer_gyt發表於2015-12-03
繼上一篇中資料庫的連線

一:Admin的工作方式
    

當服務啟動時,Django從`` url.py`` 引導URLconf,然後執行`` admin.autodiscover()`` 語句。 這個函式遍歷INSTALLED_APPS配置,並且尋找相關的 admin.py檔案。 如果在指定的app目錄下找到admin.py,它就執行其中的程式碼。

在`` books`` 應用程式目錄下的`` admin.py`` 檔案中,每次呼叫`` admin.site.register()`` 都將那個模組註冊到管理工具中。 管理工具只為那些明確註冊了的模組顯示一個編輯/修改的介面。

應用程式`` django.contrib.auth`` 包含自身的`` admin.py`` ,所以Users和Groups能在管理工具中自動顯示。 其它的django.contrib應用程式,如django.contrib.redirects,其它從網上下在的第三方Django應用程式一樣,都會自行新增到管理工具。

綜上所述,管理工具其實就是一個Django應用程式,包含自己的模組、模板、檢視和URLpatterns。 你要像新增自己的檢視一樣,把它新增到URLconf裡面。 你可以在Django基本程式碼中的django/contrib/admin 目錄下,檢查它的模板、檢視和URLpatterns,但你不要嘗試直接修改其中的任何程式碼,因為裡面有很多地方可以讓你自定義管理工具的工作方式。 (如果你確實想瀏覽Django管理工具的程式碼,請謹記它在讀取關於模組的後設資料過程中做了些不簡單的工作,因此最好花些時間閱讀和理解那些程式碼。)


二:構建簡單的Admin

修改blog中的models.py
#coding:utf-8

from django.db import models

# Create your models here

class Blog(models.Model):
title = models.CharField(max_length=20) #文章標題
author = models.CharField(max_length=15) #作者
time = models.TimeField() #時間
tag = models.CommaSeparatedIntegerField() #文章標籤
content = models.TextField() #內容

def __unicode__(self): #後臺中顯示的標題
return self.title

class Meta: #自定義資料表名字
db_table = "Blog"

修改blog目錄下的admin.py
from django.contrib import admin
from blog.models import Blog
# Register your models here.

admin.site.register(Blog)

同步資料庫(首先要刪除原先資料庫中的User表,否則會報錯)manage.py syncdb

建立超級使用者:
    manage.py cteatesuperuser

瀏覽器訪問:
    127.0.0.1:8000/admin
    輸入剛才建立的賬號和密碼

三:模組級別的修改

設定欄位可選
    name = models.CharField(max_length = 20, **blank = True**)
設定日期和數字型欄位可選

    SQL有指定空值的獨特方式,它把空值叫做NULL。NULL可以表示為未知的、非法的、或其它程式指定的    含義。

    在SQL中, NULL的值不同於空字串,就像Python中None不同於空字串("")一樣。這意味著某個字元型欄位(如VARCHAR)的值不可能同時包含NULL和空字串。

    為了消除歧義,Django生成CREATE TABLE語句自動為每個欄位顯式加上NOT NULL
自定義欄位標籤
    name = models.CharField(max_length = 20, **blank = True**,verbose_name="AAA")

四:自定義ModelAdmin類
#coding:utf-8
from django.contrib import admin
from blog.models import Blog
# Register your models here.


class BlogAdmin(admin.ModelAdmin):
#自定義列表
list_display = ('title','time','tag','author','content')

#新增過濾段
list_filter = ('time','author')

#自定義過濾選單,排除一些不想被他人編輯的選單
fields = ('title','time','tag','author','content')
#快速查詢欄
search_fields = ('author','time','tag',)
#多對多欄位使用filter_hierarchy,不能用於 ForeignKey欄位
filter_hierarchy = ('authors',)

# #用BlogAdmin來註冊Blog
admin.site.register(Blog, BlogAdmin)
    
    

相關文章