Admin基礎(chǔ)
admin后臺本質(zhì)上是Django給我們提供的一個app。
環(huán)境配置
admin依賴以下四個模塊泼菌,請確保它們存在于INSTALLED_APPS中:
django.contrib.auth
django.contrib.contenttypes
django.contrib.messages
django.contrib.sessions
并且要將django.contrib.admin加入到INSTALLED_APPS列表俏险。
創(chuàng)建超級用戶
python manage.py createsuperuser
要修改管理員的路由闸溃,安全起見婶芭,不能用默認(rèn)的admin/路徑。
修改超級用戶密碼
python manage.py shell
from django.contrib.auth.models import User
user = User.objects.get(username=’<用戶名>’)
user.set_password(‘<新密碼>’)
user.save()
或
python manage.py changepassword <用戶名>
#修改指定的用戶的密碼(提供用戶名)或修改當(dāng)前系統(tǒng)用戶密碼(不提供用戶名)
訪問Admin界面
http://localhost:8000/admin/
注冊數(shù)據(jù)表
在admin.py中:
admin.site.register(<表>) ????#一次只能注冊一個類
ModelAdmin類
對于每個模型坯苹,可創(chuàng)建一個對應(yīng)的ModelAdmin類,這個類的屬性就是模型的所有自定義設(shè)置摇天。
class <類名>Admin(admin.ModelAdmin):
? ??#設(shè)置ModelAdmin屬性...
admin.site.register(<表>, <表>Admin) ???????#將數(shù)據(jù)表和它的ModelAdmin類綁定注冊
@admin.register(<表>): ?????????????????????#第二種方法粹湃,裝飾器注冊
class <表>Admin(admin.ModelAdmin):
? ??#設(shè)置ModelAdmin屬性...
ModelAdmin的屬性
list_display
在實(shí)例的修改界面橫排顯示指定的字段。
list_display = (‘<字段1>’, ‘<字段2>’, ...)
list_filter
在實(shí)例的列表界面顯示一個FILTER右邊欄泉坐,用指定的字段進(jìn)行分類为鳄。
可分類的字段:BooleanField、CharField腕让、DateField孤钦、DateTimeField、IntegerField、ForeignKey偏形、ManyToManyField
list_filter = [‘<字段1>’, ‘<字段2>’, ...]
search_fields
在實(shí)例的列表界面添加搜索框静袖,在指定字段的范圍內(nèi)搜索。
search_fields = [‘<字段1>’, ‘<字段2>’, ...] ??????#字段為CharField和TextField
actions
一個包含自定義行為的列表壳猜。
actions_on_top
默認(rèn)為True勾徽,在頁面的列表上方顯示actions下拉框。
actions_on_bottom
默認(rèn)為False统扳,當(dāng)為True時喘帚,在頁面的列表下方顯示actions下拉框。
actions_selection_counter
默認(rèn)為True咒钟,在action下拉框右側(cè)顯示選中的對象數(shù)量吹由。
date_hierarchy
指定一個日期型字段,為頁面創(chuàng)建一個通過日期過濾對象的時間導(dǎo)航欄朱嘴。
date_hierarchy = ‘date’
empty_value_display
設(shè)置類中的空值字段的默認(rèn)顯示內(nèi)容(如None倾鲫,空字符串等),默認(rèn)是’-’萍嬉。
empty_value_display = ‘-empty-’
可以設(shè)置全局的字段空值的默認(rèn)顯示內(nèi)容:
admin.site.empty_value_display = ‘-empty-’?????#這是一行新代碼乌昔,并不在類中縮進(jìn)!
exclude
對指定的字段排除顯示壤追。
exclude = ('<字段1>',?‘<字段2>’, ...)
fields
指定顯示的字段磕道,其順序也是字段在Admin后臺顯示的順序。
fields?= ('<字段1>',?‘<字段2>’, ...)
可以組合元組行冰,讓幾個字段在同一行顯示溺蕉,如:
fields?= (?('<字段1>',?‘<字段2>’), ‘<字段3>’, ...)
fieldsets
根據(jù)字段對頁面進(jìn)行分組顯示,傳入二元元組悼做,其中每個元組代表一個分組疯特。
fieldsets = (
????(‘<分組標(biāo)題A>’, { ?????????????????????????#?<分組標(biāo)題>可用None表示無標(biāo)題
????????‘fields’: (‘<字段1>’, ‘<字段2>’, ...)
????????} ),
????(‘<分組標(biāo)題B>’, {
????????‘fields’: (‘<字段3>’,)
????} ),
????...
)
顯示樣式:
分組標(biāo)題A
字段1
字段2
...
分組標(biāo)題B
字段3
...
fields同樣可以組合元組,讓幾個字段在同一行顯示:
fields?= (?('<字段1>',?‘<字段2>’), ‘<字段3>’, ...)
跟’fields’同級別的屬性:
‘classes’: (‘wide’, ‘collaspe’)
一個包含額外CSS類的元組肛走,wide讓分組具備更寬的水平空間漓雅,collaspe將整個分組折疊。
‘description’
一個可選的額外說明文本朽色,放在每個分組的頂部故硅,如果內(nèi)部有HTML語法將不被轉(zhuǎn)義。
filter_horizontal
將指定的多對多字段分成水平兩部分顯示(默認(rèn)是一個選擇框)纵搁。
filter_vertical
將指定的多對多字段分成垂直兩部分顯示(默認(rèn)是一個選擇框)吃衅。
form
編寫自定義的ModelForm,用于添加/修改頁面的表單腾誉。
list_editable
指定在修改頁面中可以直接編輯的字段徘层,指定的字段將顯示為編輯框峻呕。
只能設(shè)置list_display中的字段。
list_max_show_all
指定一個數(shù)值趣效,當(dāng)列表元素總數(shù)大于該值時瘦癌,顯示為“show all”鏈接,默認(rèn)為200跷敬。
list_per_page
設(shè)置每頁顯示的元素個數(shù)讯私,默認(rèn)為100。
list_select_related
使用select_related()方法查詢數(shù)據(jù)西傀,可以減少數(shù)據(jù)庫訪問斤寇,默認(rèn)為False(只對ForeighKey字段調(diào)用),當(dāng)為True時始終調(diào)用拥褂。
可以傳入元組或列表娘锁,指定用select_related()查詢的字段。
list_select_related = (‘<字段1>’, ‘<字段2>’, ...)
ordering
設(shè)置排序方式饺鹃,傳入元組或列表莫秆。
radio_fields
用選項展示ForeighKey字段。
save_as
默認(rèn)為False悔详,顯示為“保存并添加另一個”按鈕镊屎,當(dāng)為True時變成“保存為新對象”按鈕。
save_as_continue
默認(rèn)為True茄螃,在保存新對象后跳轉(zhuǎn)到修改頁面缝驳,當(dāng)為False時,跳轉(zhuǎn)到元素列表頁面责蝠。
save_on_top
默認(rèn)為False,當(dāng)為True時萎庭,頁面頂部會提供同樣的一系列保存按鈕霜医。
show_full_result_count
默認(rèn)為True,顯示過濾后的對象的總數(shù)驳规,如“99 results (143 total)”肴敛,對整個表進(jìn)行count()操作,如果數(shù)據(jù)表很大吗购,會耗費(fèi)一定的資源医男;當(dāng)為False時顯示為“99 results (show all)“。
#將子表的數(shù)據(jù)放在主表數(shù)據(jù)中編輯捻勉,此時主表字段下面提供n組相關(guān)聯(lián)的子表字段
class <子表名>InLine(admin.StackedInLine): ??#可繼承admin.TabularInLine進(jìn)行扁平化顯示
????model = <子表名>
????extra = <編輯的子表數(shù)>
class <主表名>Admin(admin.ModelAdmin):
????inlines = [<子表名>InLine]
自定義Admin首頁
修改Admin頁面頂端的顯示文字:
在admin.py中:
django.contrib.admin.AdminSite.site_header = ‘xxx’
修改Admin首頁模板:
寫入”項目根目錄/templates/admin/base_site.html“的模板镀梭,見templates筆記第1頁。
自定義Admin的Action操作
Action操作用于修改大量的目標(biāo)踱启,可以編寫action函數(shù)來自定義該操作报账。
①在ModelAdmin類中添加屬性:
actions = [‘<函數(shù)名>’] ??????????????#將action函數(shù)預(yù)先添加到ModelAdmin中
②編寫action函數(shù)
action函數(shù)必須攜帶三個參數(shù):當(dāng)前的ModelAdmin研底、request、被選擇的QuerySet對象透罢。
在ModelAdmin類中繼續(xù)①的代碼:
def <函數(shù)名>(self, request, queryset): ?????#用self訪問ModelAdmin類本身
????for obj in queryset:
? ??????#對Queryset進(jìn)行修改...
????self.message_user(request, ‘xxxx’) ????#為操作添加提示信息榜晦,xxxx顯示為頁面頂部綠色行
<函數(shù)名>.short_description = ‘xxx’??????#對函數(shù)添加描述,顯示為Action下拉列表中的名稱羽圃,
下拉列表中默認(rèn)顯示為函數(shù)名
action函數(shù)的全站引用與禁用
admin.site.add_action(<函數(shù)名>) ?????????#將action函數(shù)作用于整個admin站點(diǎn)
admin.site.disable_action(<函數(shù)名>) ???????#將action函數(shù)全站禁用
#全站禁用的action函數(shù)也可以添加到某個ModelAdmin類的action屬性中乾胶,進(jìn)行顯式的引用
class <類名>Admin(admin.ModelAdmin):
????actions = None ?????????????????????#禁用該模型中的所有action函數(shù)