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.name
class 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