7.7admin站點
7.7.1使用步驟
(1)管理界面本地化
(2)創建管理員
(3)註冊模型類
(4)自定義管理頁面
7.7.2管理界面本地化
在settings.py中設置語言和時區
LANGUAGE_CODE = 'zh-hans' # 使用中國語言
TIME_ZONE = 'Asia/Shanghai' # 使用中國上海時間
7.7.3創建超級管理員
python manage.py createsuperuser
如果想要修改密碼可以執行
python manage.py changepassword 用戶名
7.7.4註冊模型類
admin.site.register(BookInfo)
admin.site.register(HeroInfo)
7.7.5定義模型類站點管理類
(1)方式一
class BookInfoAdmin(admin.ModelAdmin):
""圖書模型類管理類"""
pass
admin.site.register(models.BookInfo,BookInfoAdmin)
(2)方式二
@admin.register(models.HeroInfo)
class HeroInfoAdmin(admin.ModelAdmin)
"""英雄模型類管理類"""
pass
注意:使用了裝飾器後,就不用再調用admin.site.register()
7.7.6調整列表頁展示
(1)頁大小
# 每頁中顯示多少條數據
list_per_page = 2
(2)“操作選項”的位置
actions_on_bottom = True
(3)列表中的列
list_display = ['模型字段1','模型字段2',...]
(4)將方法作爲列
BookInfo:
①在模型類中添加方法:
def new_pub_date(self):
"""將日期格式化成字符串輸出"""
return self.bpub_date.strftime('%Y-%m-%d')
# return datetime.strftime(self.bpub_date,'%Y-%m-%d')
new_pub_date.short_description = '發佈日期'
new_pub_date.admin_order_field = 'bpub_date' # 指定排序依據
②在admin.py中將方法名添加到要顯示的列中
HeroInfo:
# 右側過濾欄
list_filter = ['hbook','hgender']
# 頂部搜索欄
search_fields = ['hname']
(5)關聯對象
無法直接訪問關聯對象的屬性或方法,可以在模型類中封裝方法,訪問關聯對象的成員。
1)打開booktest/models.py文件,修改HeroInfo類如下:
class HeroInfo(models.Model):
...
def read(self): return self.hbook.bread
read.short_description = '圖書閱讀量'
2)打開booktest/admin.py文件,添加到列
list_display = ['id','hname','hbook','read']
7.7.7調整編輯頁展示
(1)字段
1)允許展示編輯的字段
fields = ['btitle','bpub_date']
2)允許展示編輯的字段分組
fieldsets = ( ('基本', {'fields': ['btitle', 'bpub_date']}), ('高級', { 'fields': ['bread', 'bcomment'], 'classes': ('collapse',) # 是否摺疊顯示 }) )
注意:fields與fieldsets兩者只能選一使用
(2)關聯對象
在一對多的關係中,可以在一端的編輯頁面中編輯多端的對象,嵌入多端對象的方式包括表格、塊兩種
- 類型InlineModelAdmin:表示在模型的編輯頁面嵌入關聯模型的編輯。
- 子類TabularInline:以表格的形式嵌入。
- 子類StackedInline:以塊的形式嵌入。
1)以塊的形式嵌入
準備關聯的類
①打開booktest/admin.py文件,創建HeroInfoStackInline類。
class HeroInfoStackInline(admin.StackedInline):
model = HeroInfo # 要編輯的對象
extra = 1 # 附加編輯的數量
添加關聯
②打開booktest/admin.py文件,在BookInfoAdmin類中添加:
inlines = [HeroInfoStackInline]
2)以表格的形式嵌入
①打開booktest/admin.py文件,創建HeroInfoTabularInline類。
class HeroInfoTabularInline(admin.TabularInline):
model = HeroInfo
extra = 1
②打開booktest/admin.py文件,在BookInfoAdmin類中添加: inlines = [HeroInfoTabularInline]
7.7.8調整站點全局頁面信息
- admin.site.site_header 設置網站頁頭
- admin.site.site_title 設置頁面標題
- admin.site.index_title 設置首頁標語
7.7.9站點上傳圖片
(1)安裝圖片處理模塊
pip install Pillow
(2)指定上傳的文件的存儲位置
static_files—>media—>book
在settings.py 文件中添加如下上傳保存目錄信息:
MEDIA_ROOT=os.path.join(BASE_DIR,"static_files/media")
(3)模型類準備image上傳字段
爲BookInfo模型類添加一個ImageFiled
image = models.ImageField(upload_to='book', verbose_name='圖書圖片', null=True)
(4)遷移
python manage.py makemigrations
python manage.py migrate