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