Django之Admin
一般使用步骤
步骤一、创建超级用户:python manage.py createsuperuser
步骤二、建立数据模型,本次都是以下面的数据模型为例
数据模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | from django.db import models Create 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from django.contrib import admin from app01 import models <h1 id = "register-your-models-here" >Register your models here.< / h1> <h1 id = "新增url" >新增URL< / h1> <h1 id = "adminapp01department-----显示列表" >admin / app01 / department / # 显示列表</h1> <h1 id = "adminapp01departmentadd---添加数据" >admin / app01 / department / add # 添加数据</h1> <h1 id = "adminapp01department1change--编辑数据" >admin / app01 / department / 1 / change / # 编辑数据</h1> <h1 id = "adminapp01department1change---删除数据" >admin / app01 / department / 1 / change # 删除数据</h1> <p>admin.site.register(models.Department)< / p> <h1 id = "新增url-1" >新增URL< / h1> <h1 id = "adminapp01userinfo-----显示列表" >admin / app01 / userinfo / # 显示列表</h1> <h1 id = "adminapp01userinfoadd---添加数据" >admin / app01 / userinfo / add # 添加数据</h1> <h1 id = "adminapp01userinfo1change--编辑数据" >admin / app01 / userinfo / 1 / change / # 编辑数据</h1> <h1 id = "adminapp01userinfo1change---删除数据" >admin / app01 / userinfo / 1 / change # 删除数据</h1> <p>admin.site.register(models.UserInfo)< / p> |
这个步骤的作用是注册模型,新增URL以供path('admin/', admin.site.urls)使用。
步骤四、登陆/admin/来增删改查。
进阶-定制页面
每个数据表都有其对应的页面,可以不同的数据表定制不同的页面。
使用方法
步骤一、利用类定义页面信息,必须继承admin.ModelAdmin
步骤二、在admin.site.register的第二个参数时填入步骤一中的类名。
案例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 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( '<a>删除</a>' ) def edit( self , obj): return '编辑' admin.site.register(models.UserInfo, UserInfoConfig) |
在反向关联管理页面中显示关联页面
表结构如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | 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中添加以下代码
1 2 3 4 5 6 7 8 | # 注意继承了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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」