zoukankan      html  css  js  c++  java
  • 【实例:利用Django管理后台管理IP地址】(三)根据需求,定制数据展示

    【实例:利用Django管理后台管理IP地址】(二)创建后台管理员和自定义的表模型

    上节已经成功在admin注册了自定义的models了,现在根据我们的需求,定制相关数据的展示。

    需求包括:

    1、表字段包括:ip地址、ip使用状态、使用人ID、使用人用户名、备注信息、非法使用天数、无法连接天数

    2、ip使用状态只有两种可选:空闲、使用中

    3、使用人用户名从后台管理用户里面选择

    4、查询列表能显示ip地址、ip使用状态、使用人用户名、备注信息、非法使用天数、无法连接天数

    5、编辑表单仅显示ip地址、ip使用状态、使用人用户名、备注信息

    6、最好能模糊查询匹配ip地址、使用人用户名、备注信息

    models.py修改为:

    from django.db import models
    from django.contrib import auth
    # Create your models here.
    
    
    class ipaddr_info(models.Model):
        ipaddr = models.CharField(max_length=20, verbose_name="IP地址")
        ipstatus_choices = (
                (0, "空闲"),
                (1, "使用中"))
        ipstatus = models.SmallIntegerField(verbose_name="IP状态", choices=ipstatus_choices)
        # userid暂时没有使用
        userid = models.IntegerField(default=0, blank=True, null=True)
        username = models.ForeignKey('auth.User', on_delete=models.SET_NULL, blank=True, null=True, verbose_name="使用人")
        comment = models.TextField(max_length=256, blank=True, null=True, verbose_name="备注")
        disconnect_alarm_num = models.IntegerField(default=0, verbose_name="无法连接告警(天)")
        connect_alarm_num = models.IntegerField(default=0, verbose_name="非法使用告警(天)")
    
        def __str__(self):
            return u'%s %d %d %d'% (self.ipaddr, self.ipstatus, self.disconnect_alarm_num, self.connect_alarm_num)

    注意:

    1、verbose_name自定义在前端显示的字段名称

    2、使用choices限制可输入数据,还可通过键值对自定义可选数据在前端显示的名称

    3、blank=True, 允许空字符串写入,但是程序写入数据过程中,可能会写入null值,所以加上null=True

    4、使用人username作为外键和用户表auth.User连接(一个ip地址只能写一个使用人,一个用户可以使用很多ip地址)

    5、对于外键,删除是是默认为级联删除,当删除一个,对应相关数据也会被删除,所以,我们尽量显示设置这个属性,在创建外键是使用on_delete即可

    1 CASCADE:这就是默认的选项,级联删除,你无需显性指定它。
    2 PROTECT: 保护模式,如果采用该选项,删除的时候,会抛出ProtectedError错误。
    3 SET_NULL: 置空模式,删除的时候,外键字段被设置为空,前提就是blank=True, null=True,定义该字段的时候,允许为空。
    4 SET_DEFAULT: 置默认值,删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
    5 SET(): 自定义一个值,该值当然只能是对应的实体了

    因为删除用户并不需要删除对应的ip地址,所以,如果使用人被删除了,就将用户一项设置为null即可;同时,要记得null=True

    6、default=0设置默认值,创建每一条数据如果没有设置该字段,则默认写入0

    admin.py修改为:

    from django.contrib import admin
    from mysiteapp.models import ipaddr_info
    # Register your models here.
    
    
    class IpaddrAdmin(admin.ModelAdmin):
      #列表显示字段 list_display
    = ('ipaddr', 'ipstatus', 'username', 'comment', 'disconnect_alarm_num', 'connect_alarm_num')
      #搜索字段 search_fields
    = ('ipaddr', 'username', 'comment')
      #编辑字段 fields
    = ('ipaddr', 'ipstatus', 'username', 'comment') admin.site.register(ipaddr_info, IpaddrAdmin)

    修改文档结构:

     修改后的数据展示:



  • 相关阅读:
    BZOJ 3083 遥远的国度(树链剖分+LCA)
    洛谷P2420 让我们异或吧(树链剖分)
    BZOJ 4034[HAOI2015]树上操作(树链剖分)
    洛谷 3701「伪模板」主席树(最大流)
    LibreOJ 6004 圆桌聚餐 (最大流)
    LibreOJ 6003 魔术球 (最大流)
    LibreOJ 6002 最小路径覆盖(最大流)
    20160501--struts2入门3
    20160501--struts2入门2
    20160427Struts2--入门1
  • 原文地址:https://www.cnblogs.com/cyanlee/p/12028537.html
Copyright © 2011-2022 走看看