Django學習(5)后臺管理頁面

登錄Django 后臺管理頁面

Django簡化了通用率很高的后臺管理頁面的代碼量吨灭,通過幾個配置就能直接使用內(nèi)置的為網(wǎng)站管理者使用的后臺頁面怀酷,簡直是碼農(nóng)福音罩阵。[1]

開始前的準備

首先要完成所有數(shù)據(jù)的遷移望迎,也就是使用上一節(jié)提到的用于數(shù)據(jù)遷移的兩個命令成榜。

python manage.py makemigrations #(后可接應(yīng)用名用于強制遷移)
sudo python manage.py migrate #(更新數(shù)據(jù)庫席爽,應(yīng)用遷移意荤,不用權(quán)限會報錯)

然后才能開始下面的步驟。

創(chuàng)建網(wǎng)站管理員賬號

首先只锻,我們得創(chuàng)建一個能登錄管理頁面的用戶玖像。在控制臺運行下面的命令(如果失敗請嘗試管理員運行,如果使用sudo失敗請不要用sudo運行):

$ python manage.py createsuperuser  

鍵入你想要使用的用戶名齐饮,然后按下回車鍵:

Username: admin

然后提示你輸入想要使用的郵件地址:

Email address: admin@example.com

最后一步是輸入密碼捐寥。你會被要求輸入兩次密碼,第二次的目的是為了確認第一次輸入的確實是你想要的密碼祖驱。

Password: 
Password (again): 
Superuser created successfully.

進入管理站點頁面

啟動自帶的開發(fā)服務(wù)器握恳,并訪問localhost/admin,會看到管理員登錄頁面:

管理員登錄界面

然后輸入上一步創(chuàng)建的賬戶名以及密碼捺僻,登錄到管理頁面的主界面:

Django 管理頁面的索引頁

但是我們數(shù)據(jù)庫中的數(shù)據(jù)還沒有在這里顯示乡洼,我們需要在應(yīng)用目錄的admin.py文件中編輯:

from django.contrib import admin
from .models import book

admin.site.register(book)

再刷新網(wǎng)頁就可以看到我們在models中寫的數(shù)據(jù)庫了,點進去就可以看到存在數(shù)據(jù)庫中的數(shù)據(jù)了匕坯,還可以進行方便的可視化的增刪改操作束昵。

后臺管理頁面的自定義功能[2]

null=True & blank=True

定義字段時添加null=True,代表此字段可存空值葛峻。
如果模型字段設(shè)置了blank=True锹雏,則管理界面的編輯頁面的此字段變?yōu)榉潜靥睿琤lank用于表單是否填寫的驗證泞歉。ForeignKey若要設(shè)置非必填逼侦,須要寫null=True, blank=True,若不寫null=True會導致沒指定ForeignKey的紀錄在列表頁不可見腰耙。
文字類型的字段若設(shè)置blank=True,那么不填時存儲的是空字符串铲球。

數(shù)據(jù)表列表顯示多個字段

默認情況下我們自己寫的數(shù)據(jù)庫表的記錄列表只顯示一個說明文字:
默認顯示每個對象的 str() 返回的值

為了方便查看挺庞,我們可以自定義列表顯示的內(nèi)容。
在應(yīng)用的admin.py中:

from django.contrib import admin
from .models import Question

class QuestionAdmin(admin.ModelAdmin):
    list_display = ('question_text', 'pub_date', 'was_published_recently')
admin.site.register(Question, QuestionAdmin)

創(chuàng)建一個模型后臺類稼病,接著將其作為第二個參數(shù)傳給 admin.site.register()选侨。
'question_text', 'pub_date'是兩個字段掖鱼,'was_published_recently'是類中的方法,也可以作為一列的標題≡疲現(xiàn)在列表看起來像這樣:

image.png

點擊字段的標題可以排序戏挡,除了默認情況下用方法返回的那一列。更多關(guān)于list_display方法屬性的信息晨仑,參見 list_display[3]褐墅。

過濾器filter

還可以在右側(cè)添加一個簡易過濾器,將以下代碼添加至 QuestionAdmin:

list_filter = ['pub_date']

搜索框search

還可以添加一個搜索框:

search_fields = ['question_text']

可以添加任意多想要被搜索的字段洪己。

現(xiàn)在是給你的修改列表頁增加分頁功能的好時機妥凳。默認每頁顯示 100 項。變更頁分頁, 搜索框, 過濾器, 日期層次結(jié)構(gòu), 和 列標題排序 均以你期望的方式合作運行答捕。

自定義后臺表單

在記錄對象詳情頁逝钥,Django 能夠構(gòu)建一個默認的表單用于展示,而且可以自定義表單的外觀和工作方式拱镐。

自定義字段顯示

調(diào)整字段的顯示順序:

from django.contrib import admin
from .models import Question

class QuestionAdmin(admin.ModelAdmin):
    fields = ['pub_date', 'question_text']
admin.site.register(Question, QuestionAdmin)

創(chuàng)建一個模型后臺類艘款,接著將其作為第二個參數(shù)傳給 admin.site.register()
對于擁有數(shù)十個字段的表單來說沃琅,為表單選擇一個直觀的排序方法就很有用了磷箕。

讓字段分類顯示:

class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]
admin.site.register(Question, QuestionAdmin)

fieldsets 元組中的第一個元素是字段集的標題。以下是我們的表單現(xiàn)在的樣子:

分成大標題和小標題易于查看

隱藏或只讀某個字段

可以直接在Admin中設(shè)置要排除的字段:

 class PostCodesAdmin(admin.ModelAdmin):
      exclude = ('pcname',)

exclude的值必須是列表或者元組阵难。但這個方法不會排除InlineModelAdmin的選項岳枷。
也可以在models.py模型字段中報告editable=False,則默認情況下在更改頁面中該字段將隱藏呜叫。任何標記為auto_nowauto_now_add的字段(日期時間之類)空繁,也會自動隱藏,因為這些字段會自動設(shè)置editable=False朱庆。
如果希望這些字段顯示在頁面上盛泡,只能看不能改,可以將它們添加到readonly_fields里:

@admin.register(Villain)
class VillainAdmin(admin.ModelAdmin, ExportCsvMixin):
    ...
    readonly_fields = ["added_on"]

添加關(guān)聯(lián)的對象

數(shù)據(jù)之間是會有關(guān)聯(lián)的娱颊,比如一個問題下面應(yīng)該關(guān)聯(lián)多個選項傲诵。添加一個inlines = [ChoiceInline]可以方便地在問題詳情頁中添加問題選項:

from django.contrib import admin
from .models import Choice, Question

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]
admin.site.register(Question, QuestionAdmin)
“Choice 對象要在 Question 后臺頁面編輯。默認提供 3 個足夠的選項字段箱硕∷┲瘢”

也可以用TabularInline替代StackedInline

class ChoiceInline(admin.TabularInline):

關(guān)聯(lián)對象以一種表格式的方式展示,顯得更加緊湊:
選項列表橫向顯示

  1. 后臺管理-Django開發(fā)文檔 ?

  2. 官方文檔-自定義后臺 ?

  3. ModelAdmin.list_display ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末剧罩,一起剝皮案震驚了整個濱河市栓拜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖幕与,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挑势,死亡現(xiàn)場離奇詭異,居然都是意外死亡啦鸣,警方通過查閱死者的電腦和手機潮饱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诫给,“玉大人香拉,你說我怎么就攤上這事◎Γ” “怎么了缕溉?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長吃型。 經(jīng)常有香客問我证鸥,道長,這世上最難降的妖魔是什么勤晚? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任枉层,我火速辦了婚禮,結(jié)果婚禮上赐写,老公的妹妹穿的比我還像新娘鸟蜡。我一直安慰自己,他們只是感情好挺邀,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布揉忘。 她就那樣靜靜地躺著,像睡著了一般端铛。 火紅的嫁衣襯著肌膚如雪泣矛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天禾蚕,我揣著相機與錄音您朽,去河邊找鬼。 笑死换淆,一個胖子當著我的面吹牛哗总,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倍试,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼讯屈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了易猫?” 一聲冷哼從身側(cè)響起耻煤,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤具壮,失蹤者是張志新(化名)和其女友劉穎准颓,沒想到半個月后哈蝇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡攘已,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年炮赦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片样勃。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡吠勘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出峡眶,到底是詐尸還是另有隱情剧防,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布辫樱,位于F島的核電站峭拘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狮暑。R本人自食惡果不足惜鸡挠,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搬男。 院中可真熱鬧拣展,春花似錦、人聲如沸缔逛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褐奴。三九已至按脚,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歉糜,已是汗流浹背乘寒。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留匪补,地道東北人伞辛。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像夯缺,于是被迫代替她去往敵國和親蚤氏。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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