django admin 后台管理展示配置
展示数据库字段名称
定义数据库表models.py
定义数据库表 文件 modules.py
verbose_name : 数据库数据的字段中文配置
# 告警通知地址 class Webhook(models.Model): name = models.CharField('名称', max_length=32) # verbose_name表示admin管理时显示的中文 webhook_type_select = ( (0, '飞书'), (1, '企微'), ) webhook_type = models.IntegerField(choices=webhook_type_select, verbose_name="地址类型", default=0) url = models.CharField(max_length=256, verbose_name='http/https地址') # verbose_name表示admin管理时显示的中文 # title = "名称" # # def __unicode__(self): # return self.title # admin后台项目中文显示设置 class Meta: verbose_name = "告警地址" verbose_name_plural = "告警地址"
class_Meta: verbose_name 表名的中文配置
class Meta:
verbose_name = "告警地址"
verbose_name_plural = "告警地址"
admin 配置文件配置展示字段admin.py
from django.contrib import admin # Register your models here. from monitor01 import models # admin 后台管理设置的展示列 class WebhookDisplay(admin.ModelAdmin): list_display = ('name', 'webhook_type', 'url') # admin后台展示的字段设置,配合admin.py search_fields = ('name',) # 配置搜索框 admin.site.register(models.Rule) admin.site.register(models.Resource) admin.site.register(models.Webhook, WebhookDisplay) admin.site.register(models.AlarmList)
设置App(应用)为中文
在apps.py 重写admin 管理首页类配置
from django.apps import AppConfig # # 取消默认的admin 管理首页配置 # class Monitor01Config(AppConfig): # default_auto_field = 'django.db.models.BigAutoField' # name = 'monitor01' # verbose_name = '客户资源报警配置' # 重写类IndexConfig,然后再在app的__init__.py 进行配置 class AppAdminConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'monitor01' verbose_name = '大客户资源报警配置' #这个就是汉化后的名称。
再在app的__init__.py 应用配置
# default_app_config的值来自apps.py的类名 default_app_config = 'monitor01.apps.AppAdminConfig'
一对一字段展示
通过admin.py 新建一个admin后台展示的类,继承admin.ModelAdmin; 属性list_display=('xxx',)定义展示的列,search_fields = ('xxx',)定义可搜索的列
外键字段通过定义函数来获取需要展示关了外表的字段
例: admin.py 自定义 AlarmListDisplay类; 类方法get_instance_name(self, obj): 获取展示字段值, list_display 填写函数名字符串,进行展示
列头名称配置:自定义类属性为 方法名.short_description = "列头名称"
# admin后台管理,报警规则展示字段 class AlarmListDisplay(admin.ModelAdmin): # admin后台展示字段 list_display = ('alarm_time', 'get_instance_name', 'alarm_rule_id', 'alarm_value', 'now_status', 'recover_time', 'hold_minutes', ) # admin后台可搜索字段 search_fields = ('alarm_time', 'get_instance_name', 'get_rule_name', 'alarm_value', 'now_status', 'recover_time', 'hold_minutes', ) # 展示一对一外键关联的资源 def get_instance_name(self, obj): return obj.alarm_resource.name + '|' + obj.alarm_resource.instance_id # 展示资源的表头命名 get_instance_name.short_description = '报警资源名|ID' # 展示一对一外键关联的规则名称 def get_rule_name(self, obj): return obj.alarm_resource.name # 展示报警规则字段的表头命名 get_rule_name.short_description = '报警规则名称'
多对多字段展示(大体同上)
区别在于类方法获取关联字段 obj.关联字段名.all() 获取所有的关联资源
# 展示多对多的字段 def get_webhook_name(self,obj): webhook_list = [] for w in obj.webhooks.all(): # obj.关联字段名.all() 获取所有的关联资源 webhook_list.append(w.name) return ';'.join(webhook_list)
admin.py
参考地址:https://h4ck.org.cn/2019/12/django-admin-foreignkey-manytomanykey-list_display%E5%B1%95%E7%A4%BA/
# admin后台管理,报警规则展示字段 class RuleDisplay(admin.ModelAdmin): list_display = ('alarm_name', 'namespace', 'metric_name','warning_type','upper_limit', 'lower_limit', 'period','get_webhook_name') # admin后台展示的字段设置,配合admin.py search_fields = ('alarm_name',) # 展示多对多的字段 def get_webhook_name(self,obj): webhook_list = [] for w in obj.webhooks.all(): webhook_list.append(w.name) return ';'.join(webhook_list) get_webhook_name.short_description = '通知地址'
优化多对多数据选择框admin.py 配置filter_horizontal
appxxx/admin.py
from django.contrib import admin # Register your models here. from monitor01 import models # admin 后台管理设置的展示列 class WebhookDisplay(admin.ModelAdmin): list_display = ('name', 'webhook_type', 'url') # admin后台展示的字段设置,配合admin.py search_fields = ('name',) # admin后台管理,报警规则展示字段 class RuleDisplay(admin.ModelAdmin): list_display = ('alarm_name', 'namespace', 'metric_name', 'warning_type','upper_limit', 'lower_limit', 'period','alarm_interval', 'max_alarm_times', 'get_instance_name', 'get_webhook_name') # admin后台展示的字段设置,配合admin.py search_fields = ('alarm_name',) # 展示多对多的字段(关联的报警警通知地址) def get_webhook_name(self,obj): webhook_list = [] for w in obj.webhooks.all(): webhook_list.append(w.name) return ';'.join(webhook_list) get_webhook_name.short_description = '通知地址' # 展示多对多关联的资源 def get_instance_name(self,obj): instance_list = [] for i in obj.instances.all(): instance_list.append(i.name) return '\r\n;'.join(instance_list) get_instance_name.short_description = '----绑定实例名列表----' filter_horizontal = ('instances', 'webhooks') # 设置在admin后台新建或修改数据的 多对多字段跨左右窗口配置对应关系。 # filter_vertical = ('instances',) # 设置在admin后台新建或修改数据的 多对多字段跨上下窗口配置对应关系。 # autocomplete_fields = ('instances','webhooks') # list_select_related=True # admin后台管理,报警规则展示字段 class ResourceDisplay(admin.ModelAdmin): list_display = ('namespace', 'uid', 'name', 'instance_id') search_fields = ('namespace', 'uid', 'name', 'instance_id',) # admin.register(models.Rule) # admin.register(models.Resource) # admin.register(models.Webhook) # admin.register(models.AlarmList) admin.site.register(models.Rule, RuleDisplay)
appxxx/models.py
# Rule 报警规则 class Rule(models.Model): ctime = models.DateTimeField(auto_now_add=True, null=True) namespace = models.CharField(max_length=32, verbose_name='资源类型(Namespace)', ) # verbose_name表示admin管理时显示的中文 alarm_name = models.CharField(max_length=32, verbose_name='报警名称',) # verbose_name表示admin管理时显示的中文 metric_name = models.CharField(max_length=32, verbose_name='MetricName', ) # verbose_name表示admin管理时显示的中文 instances = models.ManyToManyField('Resource', verbose_name="实例列表", blank=True, null=True)
admin 后台站点名称配置
-
admin.site.site_header
设置网站页头 -
admin.site.site_title
设置页面标题 -
admin.site.index_title
设置首页标语
调整前
根/目录跳转到 admin 默认首页配置
配置urls.py
from django.contrib import admin from django.urls import path from django.urls import re_path as url # from app01 import views from monitor01 import views from django.views.generic.base import RedirectView admin.site.site_header = '售后监制资源报警规则配置系统' admin.site.site_title = '金山售后监控系统' admin.site.index_title = '欢迎大家积极配置使用' urlpatterns = [ path('admin/', admin.site.urls), url(r'^favicon\.ico', RedirectView.as_view(url=r'/static/favicon.ico')), url('^$', views.gotoAdmin), # 默认站点配置
admin 菜单栏折叠优化 simpleui
https://simpleui.72wo.com/docs/simpleui/QUICK.html#%E9%93%BE%E6%8E%A5%E6%8C%89%E9%92%AE
安装:
pip install --index-url https://mirrors.aliyun.com/pypi/simple/ django-simpleui
使用:
settings.py 加载simpleui
INSTALLED_APPS = [ 'simpleui', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # 'app01', 'monitor01', ]
配置:
settings.py 配置 SIMPLEUI_CONFIG 环境变量
'system_keep': False, # 关闭系统菜单
'menu_display': ['公网拨测监控', '金山云资源监控','报警地址','报警历史', '割接/变更 公告推送', '认证和授权'], 设置一级菜单
'menus': 设置菜单子项
SIMPLEUI_CONFIG = { 'system_keep': False, # 关闭系统菜单 'menu_display': ['公网拨测监控', '金山云资源监控','报警地址','报警历史', '割接/变更 公告推送', '认证和授权'], 'dynamic': True, # 设置是否开启动态菜单, 默认为False. 如果开启, 则会在每次用户登陆时动态展示菜单内容 'menus': [{ # 公网拨测一级菜单 'app': 'monitor01', 'name': '公网拨测监控', 'icon': 'fab fa-app-store-ios', 'models': [{ 'name': 'HTTP探测', 'icon': 'fa fa-user', 'url': 'monitor01/httptestrule/' }, { 'name': 'Ping报警规则(ICMP)', 'icon': 'el-icon-video-camera-solid', 'url': 'monitor01/ippinglossrule/', },{ 'name': 'IP地址列表', 'icon': 'el-icon-video-camera-solid', 'url': 'monitor01/ipresource/', }]}, # 金山云资源监控 一级菜单 { 'app': 'monitor01', 'name': '金山云资源监控', 'icon': 'fa fa-th-list', 'models': [{ 'name': '报警规则', 'icon': 'el-icon-message-solid', 'url': 'monitor01/rule/' }, { 'name': '资源列表', 'icon': 'el-icon-picture', 'url': 'monitor01/resource/' } ]}, { 'app': 'monitor01', 'name': '报警地址', 'icon': 'fa fa-th-list', 'models': [{ 'name': '飞书企微机器人', 'icon': 'el-icon-message-solid', 'url': 'monitor01/webhook/' } ]}, # 报警历史 一级菜单 { 'app': 'monitor01', 'name': '报警历史', 'icon': 'fa fa-th-list', 'models': [{ 'name': '金山云资源报警历史', 'icon': 'el-icon-message-solid', 'url': 'monitor01/alarmlist/' }, { 'name': 'IP Ping丢包报警历史', 'icon': 'el-icon-picture', 'url': 'monitor01/ippinglossalarmlist/' }]}, # 变更通报 一级菜单 { 'app': 'monitor01', 'name': '割接/变更 公告推送', 'icon': 'fa fa-th-list', 'models': [{ 'name': '公告列表(开发中,敬请期待)', 'icon': 'el-icon-message-solid', 'url': '' }]}, # 用户管理 一级菜单 { 'app': 'auth', 'name': '认证和授权', 'icon': 'fas fa-shield-alt', 'models': [{ 'name': '用户', 'icon': 'far fa-user', 'url': 'auth/user/' }, { 'name': '组', 'icon': 'fas fa-users-cog', 'url': 'auth/group/', }] }] }
posted on 2023-02-04 22:26 zhangmingda 阅读(577) 评论(0) 编辑 收藏 举报