Django之Admin

一般使用步骤

步骤一、创建超级用户:python manage.py createsuperuser
步骤二、建立数据模型,本次都是以下面的数据模型为例

数据模型
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
from django.contrib import admin
from app01 import models

Register 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

posted on 2020-01-26 16:54  Treelight  阅读(253)  评论(0编辑  收藏  举报