登錄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)建的賬戶名以及密碼捺僻,登錄到管理頁面的主界面:
但是我們數(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ù)庫表的記錄列表只顯示一個說明文字:為了方便查看挺庞,我們可以自定義列表顯示的內(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)在列表看起來像這樣:
點擊字段的標題可以排序戏挡,除了默認情況下用方法返回的那一列。更多關(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_now
或auto_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)
也可以用TabularInline
替代StackedInline
:
class ChoiceInline(admin.TabularInline):
關(guān)聯(lián)對象以一種表格式的方式展示,顯得更加緊湊: