Django xadmin 定制

Django xadmin 定制


页面显示中文

1
2
3
4
5
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'

标题设置

site-title和site-footer都是设置在base_site.html模板页面中的,可以从xadmin的安装目录下的xadmin\templates\xadmin目录中找到:

1
2
3
4
5
6
7
8
9
10
11
12
{% extends 'xadmin/base.html' %}
{% load i18n xadmin_tags %}
{% block title %}{{ title }} | {{ site_title }}{% endblock %}
{% block footer %}
<div id="footer">
<hr/>
<footer class="text-center">
<p>&copy; {% block site_footer %}{{ site_footer }}{% endblock %}</p>
</footer>
</div>
{% endblock %}

从图片中可以看出来,site_title和site_footer都是可以通过程序设置的变量,那么想要设置这两个变量要怎么做呢?只要在adminx.py文件中添加GlobalSetting类,具体代码如下:

1
2
3
4
5
6
7
8
9
# configure site_title, site_footer
class GlobalSetting(object):
# 设置base_site.html的Title
site_title = 'CM Server Admin'
# 设置base_site.html的Footer
site_footer = 'Tony Wang'
menu_style = "default" # "accordion" 设置菜单折叠
xadmin.site.register(views.CommAdminView, GlobalSetting)

此处输入图片的描述

设置models全局图标

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class GlobalSetting(object):
# 设置base_site.html的Title
site_title = 'CM Server Admin'
# 设置base_site.html的Footer
site_footer = 'Tony Wang'
menu_style = "default" # "accordion" 设置菜单折叠
# 设置 models图标
# https://v3.bootcss.com/components/
# http://www.yeahzan.com/fa/facss.html
global_search_models = [Server, Pool]
global_models_icon = {
# Server: "glyphicon glyphicon-tree-conifer", Pool: "fa fa-cloud"
Server: "fa fa-linux", Pool: "fa fa-cloud"
}
xadmin.site.register(views.CommAdminView, GlobalSetting)

此处输入图片的描述

设置app标题

mysite/labinfo/apps.py里添加verbose_name

1
2
3
class LabinfoConfig(AppConfig):
name = 'labinfo'
verbose_name = 'HZDC'

mysite/labinfo/__init__.py添加默认配置。

1
default_app_config = 'labinfo.apps.LabinfoConfig'

此处输入图片的描述

列表定时刷新

1
2
3
class ServerAdmin(object):
......
refresh_times = (3, 5)

此处输入图片的描述

书签

1
2
3
4
5
6
7
8
9
10
class ServerAdmin(object):
......
# configure bookmarks
list_bookmarks = [{
'title': "site1", # 书签的名称, 显示在书签菜单中
'query': {'server_type': ''}, # 过滤参数, 是标准的 queryset 过滤
# 'order': ("-id"), # 排序参数
'cols': ('id', 'ip', 'vip', 'DNS'), # 显示的列
'search': 'test' # 搜索参数, 指定搜索的内容
}]

此处输入图片的描述

图表

在数据列表页面,根据列表数据生成图表,可以指定多个数据列,生成多个图表。

在Model OptionClass 中设定data_charts属性,该属性为dict类型,key是图表的标示名称,value是图表的具体设置属性,示例:

1
2
3
4
5
6
7
class ServerAdmin(object):
......
data_charts = {
"user_count": {'title': u"Server Report", "x-field": "create_time", "y-field": "id",
"order": ('create_time',)},
# "avg_count": {'title': u"Server Report", "x-field": "date", "y-field": ('avg_count',), "order": ('date',)}
}
  • title : 图表的显示名称

  • x-field : 图表的 X 轴数据列, 一般是日期, 时间等

  • y-field : 图表的 Y 轴数据列, 该项是一个 list, 可以同时设定多个列, 这样多个列的数据会在同一个图表中显示

  • order : 排序信息, 如果不写则使用数据列表的排序

此处输入图片的描述

数据导出

如果想要导出Excel数据,需要安装xlwt。

默认情况下,xadmin会提供Excel,CSV,XML,json四种格式的数据导出,可以通过设置OptionClass的list_export属性来指定使用哪些导出格式(四种格式分别用xls,csv,xml,json表示)或是将list_export设置为None来禁用数据导出功能。

1
2
3
class ServerAdmin(object):
......
list_export = ('xls', 'xml', 'json')

设置只读字段

在使用xadmin的时候,ModelAdmin默认只有对于model的增删改查,但是总是有些字段是不希望用户来编辑的。而 readonly_fields 设置之后不管是admin还是其他用户都会变成只读,而我们通常只是想限制普通用户。 这时我们就可以通过重写 get_readonly_fields 方法来实现对特定用户的只读显示。

1
2
3
4
5
6
7
8
9
class ServerAdmin(object):
......
def get_readonly_fields(self):
""" 重新定义此函数,限制普通用户所能修改的字段 """
if self.user.is_superuser:
self.readonly_fields = []
return self.readonly_fields
readonly_fields = ('server_type',)

此处输入图片的描述

此处输入图片的描述