Django之Admin
一般使用步骤
步骤一、创建超级用户:python manage.py createsuperuser
步骤二、建立数据模型,本次都是以下面的数据模型为例
数据模型
from django.db import modelsCreate your models here.
class Department(models.Model):
"""部门表"""
name = models.CharField(max_length=32)def __str__(self): return self.nameclass UserInfo(models.Model):
"""用户表"""
name = models.CharField(max_length=32)
email = models.EmailField()
dp = models.ForeignKey(to='Department', on_delete=models.CASCADE)class Role(models.Model):
"""角色表"""
name = models.CharField(max_length=32)
users = models.ManyToManyField(to='UserInfo')
步骤三、在app文件夹下的admin.py中注册模型,如下:
admin.py
from django.contrib import admin from app01 import modelsRegister your models here.
新增URL
admin/app01/department/ # 显示列表
admin/app01/department/add # 添加数据
admin/app01/department/1/change/ # 编辑数据
admin/app01/department/1/change # 删除数据
admin.site.register(models.Department)
新增URL
admin/app01/userinfo/ # 显示列表
admin/app01/userinfo/add # 添加数据
admin/app01/userinfo/1/change/ # 编辑数据
admin/app01/userinfo/1/change # 删除数据
admin.site.register(models.UserInfo)
这个步骤的作用是注册模型,新增URL以供path('admin/', admin.site.urls)使用。
步骤四、登陆/admin/来增删改查。
进阶-定制页面
每个数据表都有其对应的页面,可以不同的数据表定制不同的页面。
使用方法
步骤一、利用类定义页面信息,必须继承admin.ModelAdmin
步骤二、在admin.site.register的第二个参数时填入步骤一中的类名。
案例如下:
class UserInfoConfig(admin.ModelAdmin): # 定义用户信息界面的配置信息,必须继承admin.ModelAdmin
list_display = ['id', 'name', 'email', 'dp', 'delete', 'edit', ] # 定义网页中显示的字段
# 其中delete和edit结合以下的delete和edit函数使用
list_display_links = ['id'] # 定义网页中可链接的字段
list_filter = ['name', 'dp'] # 定制过滤的字段
list_editable = ['name', 'email'] # 定制可编辑的字段,不过此字段不能出现在list_display_links中
search_fields = ['name', 'email'] # 定义搜索的字段
save_on_top = True # 在顶部也存在保存按钮
def func(self, request, queryset):
"""定义方法,以便在actions中选定时执行"""
print(request.POST.getlist('_selected_action'))
func.short_description = '显示ID' # 在actions选择框中显示
actions = [func, ]
def delete(self, obj):
return mark_safe('删除')
def edit(self, obj):
return '编辑'
admin.site.register(models.UserInfo, UserInfoConfig)
在反向关联管理页面中显示关联页面
表结构如下:
class Trigger(models.Model):
"""触发器"""
name = models.CharField(max_length=64, verbose_name='触发器名称')
severity_choices = ((0, 'Information'),
(1, 'Warning'),
(2, 'Average'),
(3, 'High'),
(4, 'Disaster'))
severity = models.IntegerField(choices=severity_choices, verbose_name='告警级别')
enable = models.BooleanField(default=True)
memo = models.TextField(verbose_name='备注', blank=True, null=True)
class TriggerExpression(models.Model):
"""触发器表达式"""
trigger = models.ForeignKey('Trigger', on_delete=models.CASCADE, verbose_name='所属触发器')
service = models.ForeignKey('Service', on_delete=models.CASCADE, verbose_name='关联服务')
service_index = models.ForeignKey(ServiceIndex, verbose_name='关联服务指标', on_delete=models.CASCADE)
specified_index_key = models.CharField(verbose_name='只监控专门指定的指标key', max_length=64, blank=True, null=True)
operator_type_choices = (('gt', '>'),
('lt', '<'),
('eq', '='))
operator_type = models.CharField(max_length=32, choices=operator_type_choices, verbose_name='运算符')
threshold = models.IntegerField(verbose_name='阈值')
logic_type_choices = (('and', 'AND'),
('or', 'OR'))
logic_type = models.CharField(verbose_name='与一个条件的逻辑关系', choices=logic_type_choices,
max_length=32, blank=True, null=True)
data_calc_type_choices = (('avg', 'Average'),
('max', 'Max'),
('hit', 'HIT'),
('last', 'Last'))
data_calc_func = models.CharField(max_length=64, choices=data_calc_type_choices, verbose_name='数据处理方式')
data_calc_args = models.CharField(max_length=64, verbose_name='函数传入参数')
如果想要求在trigger这个表中也可以查看triggerexpression(反射关联trigger),则需要在admin.py中添加以下代码
# 注意继承了admin.TabularInline
class TriggerExpressionInline(admin.TabularInline):
model = models.TriggerExpression
# 被关联表的配置,注意设置的inlines属性为上面的类名
class TriggerAdmin(admin.ModelAdmin):
list_display = ('name', 'severity', 'enable')
inlines = [TriggerExpressionInline, ]
更详细的信息请参考:https://www.cnblogs.com/wupeiqi/articles/7444717.html
浙公网安备 33010602011771号