Django后台管理
使用
本地化
1
2
3# settings.py文件
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'创建超级管理员
1
python manage.py createsuperuser
注册模型类
1
2
3
4
5
6
7# 应用对象的admin.py文件中
from wuxiang.models import Book, Hero
class HeroAdmin(admin.ModelAdmin):
list_display = ['hname', 'hcomment', 'hgender', 'hook']
admin.site.register(Hero, HeroAdmin)
列表页
修改后台列表页显示内容
1
2
3
4
5
6
7# 修改应用对象的models.py文件
class Book(models.Model):
btitle = models.CharField(max_length=256)
def __str__(self):
# 添加__str__返回方法
return self.btitle后台每页显示内容的条数、多列内容
1
2
3
4
5# 修改应用中的admin.py文件
class BookAdmin(admin.ModelAdmin):
list_display = ['btitle', 'bcontent', 'bpub_date']
# 添加该属性,表示每页10条数据
list_per_page = 10通过方法修改列表页要展示的列表内容
修改app中models.py文件,添加方法和对应的属性
1
2
3
4
5
6
7
8
9
10
11
12# 修改应用下models.py文件,自定义方法
class Book(models.Model):
# 修改已知字段在后台的显示名称,通过添加参数:verbose_name='标题'
bpub_date = models.CharField(verbose_name='日期', max_length=256)
def title(self):
# title方法返回bpub_date这一列
return self.bpub_date
# 添加后台列表页title字段的排列方式是按照bpub_date进行排序,方法名本身不支持排序
title.admin_order_field = 'bpub_date'
# 给title方法的列指定一个自定义的名称
title.short_description = '时间'admin.py文件中的list_display添加方法名
1
2
3# 修改应用中的admin.py文件
class BookAdmin(admin.ModelAdmin):
list_display = ['btitle', 'bcontent', 'title']
修改列表页操作下拉框的位置
1
2
3
4
5
6# 修改对应应用下的admin.py文件
class BookAdmin(admin.ModelAdmin):
list_display = ['btitle', 'bcontent', 'bpub_date', 'title']
# True表示显示出来,False表示不显示
actions_on_bottom = True
actions_on_top = False添加列表页右侧过滤栏
1
2
3
4
5# 修改对应app下的admin.py文件
class BookAdmin(admin.ModelAdmin):
list_display = ['btitle', 'bcontent', 'bpub_date', 'title']
# list_filter的列表中填写用于过滤的字段名,但是他不能是方法名
list_filter = ['btitle', 'bcontent']添加列表页上方的搜索框
1
2
3
4
5# 修改对应app下的admin.py文件
class BookAdmin(admin.ModelAdmin):
list_display = ['btitle', 'bcontent', 'bpub_date', 'title']
# 添加列表页上方的搜索框,列表中的参数是该搜索框支持的搜索字段
search_fields = ['btitle', 'bcontent']利用一对多的关系,通过外键访问到一端对应的内容,并显示在当前列表中
修改models.py文件中的模型对象
1
2
3
4
5
6
7
8# 修改对应app下的models.py文件
class Hero(models.Model):
hname = models.CharField(max_length=50)
hook = models.ForeignKey("Book", on_delete=models.CASCADE)
def parent(self):
# 通过外键对象访问到父级的属性
return self.hook.btitle在app对应的admin.py文件中list_display添加该方法
1
2class HeroAdmin(admin.ModelAdmin):
list_display = ['hname','shuai','parent']
编辑页
修改编辑页各列显示顺序
1
2
3
4
5# 修改app对应的admin.py文件
class BookAdmin(admin.ModelAdmin):
list_display = ['btitle', 'bcontent', 'bpub_date', 'title']
# 非可编辑列不可写在其中,如方法名
fields = ['bcontent', 'btitle', 'bpub_date']编辑页的内容分组展示
1
2
3
4
5
6
7
8
9
10# 修改app对应的admin.py文件
# fieldsets与fields参数相冲突,只能选择其一
class BookAdmin(admin.ModelAdmin):
list_display = ['btitle', 'bcontent', 'bpub_date', 'title']
# 将要展示的列分不同组进行展示,是元组套着元组
fieldsets = (
# '基本'是分组名称;fields是分组中展示的列内容
('基本', {"fields":['bcontent']}),
('内容部分', {"fields": ['btitle', 'bpub_date']})
)利用一对多的外键关系,在一端直接显示修改多端的内容
以块状显示多端的内容
1
2
3
4
5
6
7
8
9
10
11
12# 修改app对应的admin.py文件
# 创建一个类,继承StackedInline类
class BookStackedInline(admin.StackedInline):
# model参数写对应的类名
model = Hero
# 多端预留的可编辑内容的条数
extra = 2
class BookAdmin(admin.ModelAdmin):
list_display = ['hname', 'hcbcontentomment', 'hgender', 'hook', 'parent']
# inlines参数中填写刚刚定义的类名
inlines = [BookStackedInline]以列表显示多端的内容
1
2
3
4
5
6
7
8
9
10
11
12# 修改app对应的admin.py文件
# 创建一个类,继承TabularInline类
class BookTabularInline(admin.TabularInline):
# model参数写多端对应的类名
model = Hero
# 多端预留的可编辑内容的条数
extra = 2
class BookAdmin(admin.ModelAdmin):
list_display = ['hname', 'hcbcontentomment', 'hgender', 'hook', 'parent']
# inlines参数中填写刚刚定义的类名
inlines = [BookTabularInline]
重写Admin后台模板
寻找到admin默认的模板路径
1
2位于python虚拟环境下
\Django重置\venv\Lib\site-packages\django\contrib\admin\templates\admin\base.html在项目的模板目录下创建文件夹admin
1
2如果需要修改什么模板内容,则将第一步中对应的模板文件赋值到该目录下进行编辑
mkdir admin