一:
注意:开始先在应用下面创建一个adminx.py文件,名称必须是adminx.py,然后在该文件中做以下操作,切记不能再admin.py文件中做下面的操作
1. 导入xadmin及需要注册的模型类
import xadmin
from .models import Students, Class, Subjects
2. 自定义模型管理类,继承自object基类,(admin中继承是:admin.ModelAdmin)
# 自定义模型管理类
class StudentsAdmin(object):list_display = ("name", "sex", "age", "address")
3. 注册模型类
# 注册模型类
xadmin.site.register(Students, StudentsAdmin)
4. 内联复选框的用法
当一个学生对应多门课程的时候,就需要在学生类里面定义一个多对多的关联属性 models.ManyToManyField
然后需要在admin.py中的学生管理类中增加如下属性:
# 设置模型类字段以多选框的方式呈现并选择style_fields = {'subjects': 'checkbox-inline', } # 此处的subjects是模型类中的关系属性名
同时需要为模型类中的关系属性增加一个参数:
subjects = models.ManyToManyField("Subjects", verbose_name="选修课程", blank=True)
# 新增的参数是:blank=True,如果不增加此参数,那么多选框必须全选才行
5. 设置搜索条件,在模型管理类中增加如下属性
# 设置搜索条件search_fields = ["name"]
5.1要是我们想通过班级或者学科来查找这个班级或者选修这门学科的所有学生
也就是说在多的表中想通过外键搜索或过滤数据,只需要使用 "关系属性名__对应的字段名" 即可实现过滤和搜索,注意事双下划线
search_fields = ('name', 'class_name', 'subjects',)这样定义程序就会报错,因为因为这是Students学生表中的关系属性,并不是字段名,正确的写法是:
# 设置搜索条件,如果是关系属性,需要写成:关系属性名__对应的字段名search_fields = ["name", "class_name__class_name", "subjects__name"]
6. 过滤
# 过滤list_filter = ["sex"]
7. 排序
# 顺序排序
ordering = ('age', 'name', )# 逆序排序,在前面加一个减号"-",例如按年龄倒序排列ordering = ('-age',)
二:定制网站信息
1. 我们希望登录网站的时候,显示站点的名称,修改adminx.py文件,添加LoginViewAdmin类,并注册:
# 修改的是登录窗口的大标题
from xadmin.views.website import LoginViewclass LoginViewAdmin(LoginView):title = '学生信息管理系统'xadmin.site.register(LoginView, LoginViewAdmin)
2. 修改浏览器标题和左上角的网页标题以及页脚的版权信息:
from xadmin.views import CommAdminView
class GlobalSetting(CommAdminView):# 左上角及浏览器标题site_title = '学生信息管理系统'# 页脚版权信息site_footer = 'Copyright © 2018 宝宝巴士'xadmin.site.register(CommAdminView, GlobalSetting)
3. 左侧边栏如果以后项目越来越多了,有一个归类会更好看些,也方便管理操作。这就需要在GlobalSetting类中添加
menu_style = 'accordion'
三、样式如下
四:xadmin中全局配置详解
1. 主题设置
from xadmin import views# 增加自选主题样式
class BaseSetting(object):enable_themes=Trueuse_bootswatch=Truexadmin.site.register(views.BaseAdminView, BaseSetting)
2. 修改主菜单英文变中文,也就是应用名改编成中文
第一步:应用下的apps.py文件中增加下面一句代码
第二步:应用下面的__init__.py文件中输入下面代码
五:样式又得到了更新,如下
六:xadmin的详细配置
1. 站点model模型管理
xadmin 可以使用的页面样式控制基本与Django原生的admin一直。# 按日期、月份筛选
date_hierarchy = "date"list_display 列表展示的字段preserve_filters 默认情况下,当你对目标进行创建、编辑或删除操作后,页面会依然保持原来的过滤状态。将preserve_filters设为False后,则会返回未过滤状态。prepopulated_fields 设置预填充字段。不接收DateTimeField、ForeignKey和ManyToManyField类型的字段。view_on_site 这个属性可以控制是否在admin页面显示“View site”的链接。这个链接主要用于跳转到你指定的URL页面。free_query_filter 属性: 默认为 True , 指定是否可以自由搜索. 如果开启自由搜索, 用户可以通过 url 参数来进行特定的搜索,
search_fields 可以通过搜索框搜索的字段名称,xadmin使用的是 模糊查询,存在外键 同 list_filter 一样 注意:只能包括 字符类型,不能有 非字符类型 如:SBBH-20180515-0002
list_filter 可以进行过滤操作的列,例如:存在外键字段class ---》student__class 获取值ordering 默认排序的字段
readonly_fields 在编辑页面的只读字段
exclude 在编辑页面隐藏的字段
list_editable 在列表页可以快速直接编辑的字段
show_detail_fileds 在列表页显示详情信息
refresh_times 指定列表页的数据定时刷新 例如:refresh_times=(3,5)
list_export 控制列表页导出数据的类型
show_bookmarks 控制是否显示书签功能
data_charts 控制显示图标的样式
model_icon 配置表的图标,可以在 awesome 上下载最新的font-awesome.css 替换,并寻找相应的icon书写
fieldsets ,详细页面时,使用fieldsets标签对数据进行分割显示
empty_value_display = "列数据为空时,显示默认值"
# 列聚合,可用的值:"count","min","max","avg", "sum"
aggregate_fields = {"expire": "max"}# 显示还原按钮,删除修改的信息可以还原
reversion_enable = True# 添加数据时候,一步一步提供数据
wizard_form_list = [("基础信息", ("name", "contact", "telphone", "address")),("其它信息", ("customer_id", "expire", "description")),
]fields 表单显示内容, 不包含在内的字段不能编辑
filter_horizontal 从‘多选框’的形式改变为‘过滤器’的方式,水平排列过滤器,必须是一个 ManyToManyField类型,且不能用于 ForeignKey字段,默认地,管理工具使用下拉框 来展现外键 字段raw_id_fields 将ForeignKey字段从‘下拉框’改变为‘文本框’显示relfield_style 后台自定义不是下拉选择框,而是搜索框(解决了为什么用户不是下拉框的问题。。) relfield_style = 'fk-ajax'
exclude 在编辑和查看列表时指定不显示的字段
list_editable 列表显示的时候,指定的字段可以直接页面一键编辑
list_display_links 设置默认可编辑字段
list_per_page = 20 每页显示20个
actions = ('ocr_action', 'excel_action', 'auto_excel_action') 在类中自定义的函数方法
auto_excel_action.short_description='自动化导入数据文件' 函数名描述object_list_template = "test.html" 自定义页面data_charts 图表,该属性为dict类型,key为图表的标示名称,value为图表的具体设置属性
data_charts = {"user_count": {'title': u"约运动","x-field": "sport_time", "y-field": ("people_nums",),},}图表属性:title : 图表的显示名称x-field : 图表的 X 轴数据列, 一般是日期, 时间等y-field : 图表的 Y 轴数据列, 该项是一个 list, 可以同时设定多个列, 这样多个列的数据会在同一个图表中显示order : 排序信息, 如果不写则使用数据列表的排序# 导出类型list_export = ('xls', 'xml', 'json') list_export设置为None来禁用数据导出功能#导出字段list_export_fields = ('start_people', 'sport', 'sport_time')
2. 站点全局配置
import xadmin
from xadmin import viewsclass BaseSetting(object):"""xadmin的基本配置"""enable_themes = True # 开启主题切换功能use_bootswatch = True # 支持切换主题xadmin.site.register(views.BaseAdminView, BaseSetting)class GlobalSettings(object):"""xadmin的全局配置"""site_title = "xxx后台管理系统" # 设置站点标题site_footer = "xxxxxxx" # 设置站点的页脚menu_style = "accordion" # 设置菜单折叠,在左侧,默认的# 设置models的全局图标, UserProfile, Sports 为表名global_search_models = [UserProfile, Sports]global_models_icon = {UserProfile: "glyphicon glyphicon-user", Sports: "fa fa-cloud"xadmin.site.register(views.CommAdminView, GlobalSettings)
3. style_fields 控制字段的显示样式,默认ManyToManyField字段样式是个单排下拉框,添加选项不方便,
下面是两种样式
subjects:是Model中的一个多对多字段
checkbox-inline和m2m_transfer是两种样式
filter_horizontal = ["subjects"] # 多对多样式字段支持过滤
七:样式如图
八:全局图标配置:
(1)图标网址:
https://fontawesome.dashgame.com/
(2)全局配置,可以配置所有应用下面的模型类对应的图标,只需要王global_models_icon字典中追加模型类名:图标名即可。
from xadmin.views import CommAdminView
from apps.organizations.models import Teacher# 全局配置
class GlobalSetting(CommAdminView):global_models_icon = {Teacher: "fa fa-address-book", # Teacher模型类,address-book图标名称,fa fa-前缀}# 注册模型类
xadmin.site.register(CommAdminView, GlobalSetting)
参考更详细链接地址:https://www.cnblogs.com/pgxpython/p/10217888.html