1.1在settings.py中设置语言和时区
#(3)配置时区和语言 ,修改成中文
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'
1.2 创建超级管理员
创建管理员的命令如下,按提示输入用户名、邮箱、密码。
在终端输入: python manage.py createsuperuser
用户名与密码:admin/123456
1.3 打开浏览器:http://127.0.0.1:8000/admin/ 输入用户名和密码
登录后台管理后,默认没有我们创建的应用中定义的模型类,需要在自己应用中的admin.py文件中注册,才可以在后台管理中看到,并进行增删改查操作。
2.1 打开books/admin.py文件,编写如下代码:
from django.contrib import admin
from .models import BookInfo, CustomerInfo
# Register your models here.
'''
1.导入模型类
2.注册模型类
'''
admin.site.register(BookInfo)
admin.site.register(CustomerInfo)
2.2 访问:http://127.0.0.1:8000/admin/
2.3 调整站点信息
打开books/admin.py文件,编写如下代码:
#网页列标题
admin.site.site_header='我的书城'
#网页标题
admin.site.site_title='我的书城MIS'
#首页标语
admin.site.index_title='欢迎使用我的书城'
2.4 定义与使用Admin管理类
打开books/admin.py文件,编写如下代码:
from django.contrib import admin
from .models import BookInfo, CustomerInfo
'''
使用两种管理方式:
'''
#(2) 装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
pass
#(1)自定义模型类
class BookInfoAdmin(admin.ModelAdmin):
pass
# (1)注册参数
admin.site.register(BookInfo, BookInfoAdmin)
# 必须注释掉,使用上面的装饰器
# admin.site.register(CustomerInfo)
3.1 页大小
打开books/admin.py文件,编写如下代码:
# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
list_per_page = 2 #前2页
pass
#使用注册自定义的模型类
admin.site.register(BookInfo,BookInfoAdmin)
admin.site.register(CustomerInfo)
访问http://127.0.0.1:8000/admin/,简单的分页
3.2 "操作选项"的位置
底部有个动作:
# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
list_per_page = 2 #前2页
actions_on_top = True #顶部显示
actions_on_bottom = True #底部显示
pass
3.3 列表中的列
# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
#显示模型类中的字段
list_display = ['name','pub_date','read_count','comment_count','is_del']
3.4 将方法作为列
在books/model.py下图书写代码
#1.图书表
class BookInfo(models.Model):
####计算总数量################
def sum_count(self):
return self.read_count+self.comment_count
sum_count.short_description='总量' #设置方法中的字段在admin
################################
注意:sum_count的名字必须与上面的方法名相同哦!
3.5关联对象
无法直接访问关联对象的属性或方法,可以在模型类中封装方法,访问关联对象的成员。
#装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
#显示模型类中的字段
list_display = ['name','gender','detail','book','is_del']
pass
在books/model.py下人物写代码:
#2.人物表
class CustomerInfo(models.Model):
#显示人物的图书阅读量###
def read(self):
#self.外键.主表字段
return self.book.read_count
read.short_description='图书阅读量'
#######################
3.6 右侧栏过滤器
打开books/admin.py文件,修改CustomerInfoAdmin类如下:
#装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
#显示模型类中的字段
list_display = ['name','gender','detail','book','read','is_del']
#过滤书,名称
list_filter = ['book','name']
pass
3.7 搜索框
用于对指定字段的值进行搜索,支持模糊查询。列表类型,表示在这些字段上进行搜索。
# 装饰器
@admin.register(CustomerInfo)
class CutomerInfoAdmin(admin.ModelAdmin):
# 搜索名称
search_fields = ['name']
3.8调整编辑页展示-显示部分字段
打开books/admin.py文件,修改BookInfoAdmin类如下:
class BookInfoAdmin(admin.ModelAdmin):
# 指定显示字段
# fields = ['name','pub_date']
3.9 分组显示
```
fieldset=(
('组1标题',{'fields':['字段1','字段2']}),
('组2标题',['fields':('字段3','字段4'],
'classes': ('collapse',) # 是否折叠显示}),
)
```
打开books/admin.py文件,修改BookInfoAdmin类如下:
class BookInfoAdmin(admin.ModelAdmin):
# 指定显示字段
# fields = ['name','pub_date']
# 分组显示
fieldset = (
('基本', {'fields': ['name', 'pub_date']}),
('高级', {'fields': ['read_count', 'comment_count'],
'classes': ('collapse',) # 是否折叠显示
}),
)
3.10 关联对象
在一对多的关系中,可以在一端的编辑页面中编辑多端的对象,嵌入多端对象的方式包括表格、块两种。
- 类型InlineModelAdmin:表示在模型的编辑页面嵌入关联模型的编辑。
- 子类TabularInline:以表格的形式嵌入。
- 子类StackedInline:以块的形式嵌入。
1) 以块的形式嵌入
1.打开books/admin.py文件,创建CustomerInfoStackInline类。
# 子类-块的形式
class CustomerInfoStackInLine(admin.StackedInline):
model = CustomerInfo # 编辑的对象
extra = 1 # 附加编辑的数量
2.打开books/admin.py文件,修改BookInfoAdmin类如下:
# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
# 添加子类 (必须在之前写哦!)
inlines = [CustomerInfoStackInLine]
2.表格的形式嵌入。
打开books/admin.py文件,创建CustomerInfoTabularInline类。
# 子类-表格的形式
class CustomerInfoTabularInline(admin.TabularInline):
model = CustomerInfo # 编辑的对象
extra = 1 # 附加编辑的数量
打开books/admin.py文件,修改BookInfoAdmin类如下:
# Register your models here.
class BookInfoAdmin(admin.ModelAdmin):
# 添加子类 (必须在之前写哦!)
inlines = [CustomerInfoTabularInline]
3.11 上传图片
Django有提供文件系统支持,在Admin站点中可以轻松上传图片。
使用Admin站点保存图片,需要安装Python的图片操作包 pip install Pillow
默认情况下,Django会将上传的图片保存在本地服务器上,需要配置保存的路径。
(1) 我们可以将上传的文件保存在静态文件目录中,如我们之前设置的static目录中在settings.py 文件中添加如下上传保存目录信息,会自己新建static/
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")
(2) 为模型类添加ImageField字段
我们为之前的BookInfo模型类添加一个ImageFiled
```python
class BookInfo(models.Model):
image=models.ImageField(verbose_name='图片',upload_to='book',null=True)
```
- upload_to 选项指明该字段的图片保存在MEDIA_ROOT目录中的哪个子目录
(3) 进行数据库迁移操作
```python
python manage.py makemigrations
python manage.py migrate
```
(4) 添加image字段进行显示
```python
class BookInfoAdmin(admin.ModelAdmin):
....
fieldsets = (
('基本', {'fields': ['name', 'pub_date', "image"]}), #添加image
('高级', {
'fields': ['read_count', 'comment_count'],
'classes': ('collapse',) # 是否折叠显示
})
)
inlines = [CustomerInfoTabularInline]
....
使用Admin站点上传图片
进入Admin站点的图书管理页面,选择一个图书,能发现多出来一个上传图片的字段
选择一张图片并保存后,图片会被保存在**static/media/子应用名/**目录下。
在数据库中,我们能看到image字段被设置为图片的路径