Django框架Admin站点管理一些默认的显示和功能包括语言都可以自定义设置处理,以贴近我们的实际业务。
属性说明
列表页属性
配置文件myapp/admin.py
from django.contrib import admin
from .models import Grades, Students
# Register your models here.
# 注册班级管理属性
class GradesAdmin(admin.ModelAdmin):
# 列表页属性
# 显示字段
list_display = ['id', 'name', 'boy_num', 'girl_num', 'create_time']
# 过滤器
list_filter = ['id', 'name']
# 搜索
search_fields = ['id', 'name']
# 分页
list_per_page = 1
# 注册班级管理属性
class StudentsAdmin(admin.ModelAdmin):
# 列表页属性
# 显示字段
list_display = ['id', 'name', 'gender', 'age', 'desc', 'isDel']
# 过滤器
list_filter = ['id', 'name']
# 搜索
search_fields = ['id', 'name']
# 分页
list_per_page = 2
admin.site.register(Students, StudentsAdmin)
admin.site.register(Grades, GradesAdmin)
效果如下:
设置前
属性设置后
添加、修改页属性
以新增学生来演示 StudentAdmin新增、修改属性设置
# 属性的先后顺序
fields = ('name', 'grades', 'gender', 'age', 'desc', 'isDel')
效果如下:
原始顺序
修改后
设置分组
注意:fieldsets与fields不能同时使用
# 属性的先后顺序
# fields = ('name', 'grades', 'gender', 'age', 'desc', 'isDel')
# 给属性分组
fieldsets = (
('学生信息', {'fields': ('name', 'gender', 'age', 'desc', 'isDel')}),
('班级信息', {'fields': ('grades',)}),
)
分组情况如下:
自定义显示班级
配置文件myapp/models.py
新增__str__方法
class Grades(models.Model):
""" 班级表模型 """
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=20)
boy_num = models.IntegerField()
girl_num = models.IntegerField()
create_time = models.DateTimeField()
def __str__(self):
return self.name
效果
关联模型对象操作
需求:创建班级的时候 添加2个学生
myapp/admin.py
# 关联模型对象操作
class StudentsInfo(admin.TabularInline):
model = Students
extra = 2
# 注册班级管理属性
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
效果
列表显示自定义
学生表自定义显示性别
# 注册班级管理属性
class StudentsAdmin(admin.ModelAdmin):
# 列表页属性
def gender_name(self):
if self.gender:
return '女'
else:
return '男'
gender_name.short_description = '性别'
# 显示字段
list_display = ['id', 'name', gender_name, 'age', 'desc', 'isDel']
效果如下:
执行动作位置
用来控制列表页-动作执行功能块位置显示。
关闭上面的执行动作,打开下面的执行动作。
# 注册班级管理属性
class StudentsAdmin(admin.ModelAdmin):
# 执行动作位置
actions_on_top = False
actions_on_bottom = True
效果如下:
使用装饰器注册
myapp/admin.py
隐藏原有注册 改为顶部装饰器注册。
即用 @admin.register(模型) 替换原有注册。
# 关联模型对象操作
class StudentsInfo(admin.TabularInline):
model = Students
extra = 2
# 注册班级管理属性
@admin.register(Grades)
class GradesAdmin(admin.ModelAdmin):
inlines = [StudentsInfo]
# 列表页属性
# 显示字段
list_display = ['id', 'name', 'boy_num', 'girl_num', 'create_time']
# 过滤器
list_filter = ['id', 'name']
# 搜索
search_fields = ['id', 'name']
# 分页
list_per_page = 1
# 注册班级管理属性
@admin.register(Students)
class StudentsAdmin(admin.ModelAdmin):
# 列表页属性
def gender_name(self):
if self.gender:
return '女'
else:
return '男'
gender_name.short_description = '性别'
# 显示字段
list_display = ['id', 'name', gender_name, 'age', 'desc', 'isDel']
# 过滤器
list_filter = ['id', 'name']
# 搜索
search_fields = ['id', 'name']
# 分页
list_per_page = 2
# 执行动作位置
actions_on_top = False
actions_on_bottom = True
# 属性的先后顺序
# fields = ('name', 'grades', 'gender', 'age', 'desc', 'isDel')
# 给属性分组
fieldsets = (
('学生信息', {'fields': ('name', 'gender', 'age', 'desc', 'isDel')}),
('班级信息', {'fields': ('grades',)}),
)
#admin.site.register(Students, StudentsAdmin)
#admin.site.register(Grades, GradesAdmin)