展示数据库字段名称
定义数据库表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)
标签:name,展示,admin,webhook,list,django,models,后台 From: https://www.cnblogs.com/zhangmingda/p/17072816.html