【实例:利用Django管理后台管理IP地址】(三)根据需求,定制数据展示 【实例:利用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)

修改文档结构:

 修改后的数据展示:



猜你喜欢

转载自www.cnblogs.com/cyanlee/p/12028537.html