Admin站點(diǎn)
- 通過使用startproject創(chuàng)建的項(xiàng)目模版中,默認(rèn)Admin被啟用
- 1.創(chuàng)建管理員的用戶名和密碼
python manage.py createsuperuser
然后按提示填寫用戶名胞四、郵箱恬汁、密碼
- 2.在應(yīng)用內(nèi)admin.py文件完成注冊(cè),就可以在后臺(tái)管理中維護(hù)模型的數(shù)據(jù)
from django.contrib import admin
from models import *
admin.site.register(HeroInfo)
- 查找admin文件:在INSTALLED_APPS項(xiàng)中加入django.contrib.admin辜伟,Django就會(huì)自動(dòng)搜索每個(gè)應(yīng)用的admin模塊并將其導(dǎo)入
ModelAdmin對(duì)象
- ModelAdmin類是模型在Admin界面中的表示形式
- 定義:定義一個(gè)類氓侧,繼承于admin.ModelAdmin,注冊(cè)模型時(shí)使用這個(gè)類
class HeroAdmin(admin.ModelAdmin):
...
- 通常定義在應(yīng)用的admin.py文件里
- 使用方式一:注冊(cè)參數(shù)
admin.site.register(HeroInfo,HeroAdmin)
@admin.register(HeroInfo)
class HeroAdmin(admin.ModelAdmin):
- 通過重寫admin.ModelAdmin的屬性規(guī)定顯示效果导狡,屬性主要分為列表頁约巷、增加修改頁兩部分
列表頁選項(xiàng)
“操作選項(xiàng)”的位置
- actions_on_top、actions_on_bottom:默認(rèn)顯示在頁面的頂部
class HeroAdmin(admin.ModelAdmin):
actions_on_top = True
actions_on_bottom = True
list_display
- 出現(xiàn)列表中顯示的字段
- 列表類型
- 在列表中旱捧,可以是字段名稱独郎,也可以是方法名稱,但是方法名稱默認(rèn)不能排序
- 在方法中可以使用format_html()輸出html內(nèi)容
在models.py文件中
from django.db import models
from tinymce.models import HTMLField
from django.utils.html import format_html
class HeroInfo(models.Model):
hname = models.CharField(max_length=10)
hcontent = HTMLField()
isDelete = models.BooleanField()
def hContent(self):
return format_html(self.hcontent)
在admin.py文件中
class HeroAdmin(admin.ModelAdmin):
list_display = ['hname', 'hContent']
- 讓方法排序枚赡,為方法指定admin_order_field屬性
在models.py中HeroInfo類的代碼改為如下:
def hContent(self):
return format_html(self.hcontent)
hContent.admin_order_field = 'hname'
- 標(biāo)題欄名稱:將字段封裝成方法囚聚,為方法設(shè)置short_description屬性
在models.py中為HeroInfo類增加方法hName:
def hName(self):
return self.hname
hName.short_description = '姓名'
hContent.short_description = '內(nèi)容'
在admin.py頁中注冊(cè)
class HeroAdmin(admin.ModelAdmin):
list_display = ['hName', 'hContent']
list_filter
- 右側(cè)欄過濾器,對(duì)哪些屬性的值進(jìn)行過濾
- 列表類型
- 只能接收字段
class HeroAdmin(admin.ModelAdmin):
...
list_filter = ['hname', 'hcontent']
list_per_page
- 每頁中顯示多少項(xiàng)标锄,默認(rèn)設(shè)置為100
class HeroAdmin(admin.ModelAdmin):
...
list_per_page = 10
search_fields
- 搜索框
- 列表類型顽铸,表示在這些字段上進(jìn)行搜索
- 只能接收字段
...
search_fields = ['hname']
增加與修改頁選項(xiàng)
- fields:顯示字段的順序,如果使用元組表示顯示到一行上
class HeroAdmin(admin.ModelAdmin):
...
fields = [('hname', 'hcontent')]
fieldsets:分組顯示
class HeroAdmin(admin.ModelAdmin):
...
fieldsets = (
('base', {'fields': ('hname')}),
('other', {'fields': ('hcontent')})
)
InlineModelAdmin對(duì)象
- 類型InlineModelAdmin:表示在模型的添加或修改頁面嵌入關(guān)聯(lián)模型的添加或修改
- 子類TabularInline:以表格的形式嵌入
- 子類StackedInline:以塊的形式嵌入
class HeroInline(admin.TabularInline):
model = HeroInfo
class BookAdmin(admin.ModelAdmin):
inlines = [
HeroInline,
]
重寫admin模板
- 在項(xiàng)目所在目錄中創(chuàng)建templates目錄料皇,再創(chuàng)建一個(gè)admin目錄
- 設(shè)置模板查找目錄:修改settings.py的TEMPLATES項(xiàng)谓松,加載模板時(shí)會(huì)在DIRS列表指定的目錄中搜索
'DIRS': [os.path.join(BASE_DIR, 'templates')],
- 從Django安裝的目錄下(django/contrib/admin/templates)將模板頁面的源文件admin/base_site.html拷貝到第一步建好的目錄里
- 編輯base_site.html文件
- 刷新頁面,發(fā)現(xiàn)以剛才編輯的頁面效果顯示
- 其它管理后臺(tái)的模板可以按照相同的方式進(jìn)行修改