|
@@ -119,6 +119,21 @@ class Role(models.Model):
|
|
return permslist
|
|
return permslist
|
|
|
|
|
|
|
|
|
|
|
|
+class RegionCountryModel(models.Model):
|
|
|
|
+ number = models.IntegerField(primary_key=True, verbose_name='唯一标识')
|
|
|
|
+ region_id = models.IntegerField(verbose_name='大洲编号')
|
|
|
|
+ name = models.CharField(max_length=50, verbose_name=u'名称')
|
|
|
|
+ cn = models.CharField(blank=True, max_length=64, verbose_name=u'中文名称')
|
|
|
|
+ en = models.CharField(blank=True, max_length=64, verbose_name=u'英文名称')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'region_country'
|
|
|
|
+ verbose_name = '地区表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
class Device_User(AbstractBaseUser):
|
|
class Device_User(AbstractBaseUser):
|
|
userID = models.CharField(blank=True, max_length=32, primary_key=True,
|
|
userID = models.CharField(blank=True, max_length=32, primary_key=True,
|
|
verbose_name=u'用户ID', unique=True)
|
|
verbose_name=u'用户ID', unique=True)
|
|
@@ -150,6 +165,7 @@ class Device_User(AbstractBaseUser):
|
|
fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
|
|
fingerprint_key = models.CharField(max_length=128, default='', verbose_name=u'客户端用于解码的密钥等信息')
|
|
is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户') # False:账号登录,1:本地登录
|
|
is_local = models.BooleanField(blank=True, default=False, verbose_name=u'是否是本地登录用户') # False:账号登录,1:本地登录
|
|
subscribe_email = models.SmallIntegerField(default=0, verbose_name=u'是否订阅营销邮件') # 0:未订阅,1:订阅,2:不订阅
|
|
subscribe_email = models.SmallIntegerField(default=0, verbose_name=u'是否订阅营销邮件') # 0:未订阅,1:订阅,2:不订阅
|
|
|
|
+ region_country = models.IntegerField(blank=True, default=0, verbose_name='地区表唯一标识')
|
|
objects = UserManager()
|
|
objects = UserManager()
|
|
|
|
|
|
USERNAME_FIELD = 'userID' # 必须有一个唯一标识
|
|
USERNAME_FIELD = 'userID' # 必须有一个唯一标识
|
|
@@ -240,6 +256,8 @@ class Device_Info(models.Model):
|
|
iSNotification = models.BooleanField(blank=True, verbose_name=u'报警通知 0:关闭,1:开启)', default=False)
|
|
iSNotification = models.BooleanField(blank=True, verbose_name=u'报警通知 0:关闭,1:开启)', default=False)
|
|
isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存') # 是否支持云存设备
|
|
isVod = models.SmallIntegerField(blank=True, default=0, verbose_name='是否支持云存') # 是否支持云存设备
|
|
isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除') # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
|
|
isExist = models.SmallIntegerField(blank=True, default=1, verbose_name='是否被删除') # 是否被删除了(需主用户交互) 1存在,0不存在,2设备被重置
|
|
|
|
+ isCameraOpenCloud = models.SmallIntegerField(blank=True, default=1, verbose_name='是否开启云存') # 0:不开启 1:开启
|
|
|
|
+ endpoint = models.CharField(blank=True, max_length=256, default='', verbose_name=u'iot端点')
|
|
###
|
|
###
|
|
REQUIRED_FIELDS = []
|
|
REQUIRED_FIELDS = []
|
|
|
|
|
|
@@ -404,6 +422,7 @@ class VodBucketModel(models.Model):
|
|
updTime = models.IntegerField(verbose_name='更新时间', default=0)
|
|
updTime = models.IntegerField(verbose_name='更新时间', default=0)
|
|
|
|
|
|
mold = models.SmallIntegerField(default=0, verbose_name='存储区域类型') # 0:国内阿里 1:国外aws
|
|
mold = models.SmallIntegerField(default=0, verbose_name='存储区域类型') # 0:国内阿里 1:国外aws
|
|
|
|
+ region_id = models.IntegerField(default=1, verbose_name='大洲编号')
|
|
|
|
|
|
def __str__(self):
|
|
def __str__(self):
|
|
return self.id
|
|
return self.id
|
|
@@ -1257,15 +1276,282 @@ class ProcessInfoLogsModel(models.Model):
|
|
verbose_name = '过程信息表'
|
|
verbose_name = '过程信息表'
|
|
verbose_name_plural = verbose_name
|
|
verbose_name_plural = verbose_name
|
|
|
|
|
|
|
|
+class EquipmentLogModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ user = models.CharField(blank=False, max_length=32, db_index=True, verbose_name=u'操作用户')
|
|
|
|
+ uid = models.CharField(default='', blank=True, max_length=32, verbose_name=u'设备uid')
|
|
|
|
+ equipmentid = models.CharField(blank=False, max_length=100, db_index=True, verbose_name=u'设备主键id')
|
|
|
|
+ NickName = models.CharField(blank=True, max_length=32, verbose_name=u'设备名称')
|
|
|
|
+ ip = models.CharField(max_length=100, default='', db_index=True, blank=True, verbose_name=u'访问ip地址')
|
|
|
|
+ time = models.DateTimeField(null=True, blank=True, db_index=True, verbose_name=u'访问时间')
|
|
|
|
+ operatingcontent = models.TextField(blank=True, default='', verbose_name=u'操作内容')
|
|
|
|
+ url = models.CharField(max_length=150, default='', blank=True, verbose_name=u'访问路径')
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'equipment_log'
|
|
|
|
+ verbose_name = '设备日志表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class UserModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ username = models.CharField(unique=True, max_length=128, null=False, verbose_name='用户名')
|
|
|
|
+ password = models.CharField(max_length=128, null=False, verbose_name='密码')
|
|
|
|
+ permission = models.CharField(max_length=24, null=False, verbose_name='权限')
|
|
|
|
+ login_time = models.IntegerField(blank=True, default=0, verbose_name='登录时间')
|
|
|
|
+ online = models.SmallIntegerField(default=0, verbose_name='是否在线')
|
|
|
|
+ phone = models.CharField(max_length=11, default='', verbose_name='手机号')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ verbose_name = '用户表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+ db_table = 'user'
|
|
|
|
+
|
|
|
|
|
|
-class UserRegionModel(models.Model):
|
|
|
|
|
|
+class CompanyModel(models.Model):
|
|
id = models.AutoField(primary_key=True)
|
|
id = models.AutoField(primary_key=True)
|
|
- user = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE, verbose_name='关联用户表')
|
|
|
|
- region_id = models.IntegerField(default=0, verbose_name='地区id')
|
|
|
|
|
|
+ name = models.CharField(max_length=64, unique=True, default='', verbose_name='企业名称')
|
|
|
|
+ mark = models.CharField(max_length=3, unique=True, default='', verbose_name='企业标志,用于序列号的后三位')
|
|
|
|
+ secret = models.CharField(max_length=10, db_index=True, default='', verbose_name='企业秘钥')
|
|
|
|
+ quantity = models.IntegerField(default=0, verbose_name='已购买的序列号的数量')
|
|
add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
|
|
class Meta:
|
|
class Meta:
|
|
- db_table = 'user_region'
|
|
|
|
- verbose_name = '用户地区表'
|
|
|
|
|
|
+ db_table = 'tb_company'
|
|
|
|
+ verbose_name = '企业表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class RegionModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ name = models.CharField(max_length=32, default='', verbose_name='区域名称')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_region'
|
|
|
|
+ verbose_name = '区域表'
|
|
verbose_name_plural = verbose_name
|
|
verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class VPGModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ name = models.CharField(max_length=32, default='', verbose_name='群组名称')
|
|
|
|
+ region = models.ForeignKey(RegionModel, to_field='id', on_delete=models.DO_NOTHING, verbose_name='群组用于的地区')
|
|
|
|
+ company = models.ForeignKey(CompanyModel, to_field='id', on_delete=models.DO_NOTHING, verbose_name='关联企业表')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_vpg'
|
|
|
|
+ verbose_name = 'vpg表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class UIDModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ uid = models.CharField(max_length=20, null=False, db_index=True, unique=True, verbose_name='设备id')
|
|
|
|
+ mac = models.CharField(max_length=17, null=False, default='', verbose_name='设备id对应的mac地址')
|
|
|
|
+ uid_extra = models.TextField(default='', verbose_name='uid的额外描述')
|
|
|
|
+ status = models.SmallIntegerField(default=0, verbose_name='使用状态')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+ area = models.SmallIntegerField(default=0, verbose_name='区域') #0:国内;1:国外
|
|
|
|
+ vpg = models.ForeignKey(VPGModel, to_field='id', default=1, on_delete=models.DO_NOTHING, verbose_name='关联VPG表的id')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ ordering = ('-add_time',)
|
|
|
|
+ verbose_name = 'uid表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+ db_table = 'uid'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class UserUIDModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ user = models.ForeignKey(UserModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联用户表id')
|
|
|
|
+ uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联uid表id')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ verbose_name = '用户与UID的关联表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+ db_table = 'user_uid'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class PermissionModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ type = models.SmallIntegerField(null=False, verbose_name='权限枚举')
|
|
|
|
+ description = models.TextField(default='', verbose_name='权限描述')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ verbose_name = '权限表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+ db_table = 'permission'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class LogModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ operation = models.CharField(max_length=100, default='', verbose_name='操作描述')
|
|
|
|
+ time = models.IntegerField(default=0, verbose_name='操作时间')
|
|
|
|
+ ip = models.CharField(default='', max_length=24, verbose_name='用户ip')
|
|
|
|
+ user = models.ForeignKey(UserModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联用户id')
|
|
|
|
+ content = models.TextField(default='', verbose_name='请求参数')
|
|
|
|
+ status = models.IntegerField(default=0, verbose_name='请求状态')
|
|
|
|
+ url = models.CharField(max_length=150, default='', verbose_name='请求路径')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ ordering = ('-time',)
|
|
|
|
+ verbose_name = '日志表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+ db_table = 'log'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class HistoryUIDModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ uid = models.CharField(max_length=20, null=False, db_index=True, verbose_name='设备id')
|
|
|
|
+ uid_extra = models.TextField(default='', verbose_name='uid的额外描述')
|
|
|
|
+ status = models.SmallIntegerField(default=0, verbose_name='使用状态')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+ area = models.SmallIntegerField(default=0, verbose_name='区域') # 0:国内;1:国外
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ verbose_name = '历史UID表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+ db_table = 'history_uid'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class MacModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ value = models.CharField(max_length=17, null=False, verbose_name='最新的mac地址')
|
|
|
|
+ is_active = models.BooleanField(default=True, verbose_name='当前mac地址是否可用')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ verbose_name = '最新的mac地址表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+ db_table = 'tb_mac'
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class OrderTaskModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ order_number = models.CharField(max_length=32, verbose_name='订单号')
|
|
|
|
+ board = models.CharField(max_length=32, verbose_name='主板')
|
|
|
|
+ plan = models.CharField(max_length=32, verbose_name='配置方案')
|
|
|
|
+ checksum = models.CharField(max_length=32, verbose_name='校验和')
|
|
|
|
+ ic_model = models.CharField(max_length=32, verbose_name='ic型号')
|
|
|
|
+ quantity = models.IntegerField(default=0, verbose_name='通知单上的生成数量')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'order_task'
|
|
|
|
+ verbose_name = '订单任务表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class OrderUIDModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联uid表')
|
|
|
|
+ order = models.ForeignKey(OrderTaskModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联订单任务表')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'order_uid'
|
|
|
|
+ verbose_name = '订单与uid关联表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class CountryModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ number = models.IntegerField(unique=True, verbose_name='区号')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+ region = models.ForeignKey(RegionModel, to_field='id', on_delete=models.DO_NOTHING, verbose_name='关联区域表')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_country'
|
|
|
|
+ verbose_name = '地区表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class LanguageModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ lang = models.CharField(max_length=16, default='', verbose_name='语种')
|
|
|
|
+ lang_youdao = models.CharField(max_length=16, default='', verbose_name='有道的语种')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_language'
|
|
|
|
+ verbose_name = '语言表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class CountryLanguageModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ country_name = models.CharField(max_length=64, default='', verbose_name='国家名称')
|
|
|
|
+ language = models.ForeignKey(LanguageModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联语言表的id')
|
|
|
|
+ country = models.ForeignKey(CountryModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联地区表的id')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_country_language'
|
|
|
|
+ verbose_name = '不同语言的地区名称表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class SerialNumberModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ serial_number = models.CharField(max_length=9, db_index=True, verbose_name='序列号')
|
|
|
|
+ status = models.SmallIntegerField(default=1, verbose_name='可用状态。0:不可用,1:可用')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_serial_number'
|
|
|
|
+ verbose_name = '序列号表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class CompanySerialModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ company = models.ForeignKey(CompanyModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联企业表的id')
|
|
|
|
+ serial_number = models.ForeignKey(SerialNumberModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联序列号表的id')
|
|
|
|
+ status = models.SmallIntegerField(default=0, verbose_name='序列号的状态。0:未使用,1:已使用,2:已和UID关联')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_company_serial'
|
|
|
|
+ verbose_name = '企业关联序列号表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class UIDCompanySerialModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ uid = models.ForeignKey(UIDModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联UID表')
|
|
|
|
+ company_serial = models.ForeignKey(CompanySerialModel, to_field='id', on_delete=models.CASCADE, verbose_name='关联【企业关联序列号表】的id')
|
|
|
|
+ add_time = models.IntegerField(default=0, verbose_name='添加时间')
|
|
|
|
+ update_time = models.IntegerField(default=0, verbose_name='更新时间')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'tb_uid_company_serial'
|
|
|
|
+ verbose_name = 'UID关联【企业关联序列号】表'
|
|
|
|
+ verbose_name_plural = verbose_name
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class iotdeviceInfoModel(models.Model):
|
|
|
|
+ id = models.AutoField(primary_key=True)
|
|
|
|
+ uid = models.CharField(blank=True, max_length=32, default='', verbose_name=u'设备uid')
|
|
|
|
+ certificateId = models.CharField(blank=True, max_length=256, default='', verbose_name=u'证书id')
|
|
|
|
+ certificatePem = models.TextField(blank=True, default='', verbose_name=u'证书项目')
|
|
|
|
+ publicKey = models.TextField(blank=True, default='', verbose_name=u'公有密钥')
|
|
|
|
+ privateKey = models.TextField(blank=True, default='', verbose_name=u'私有密钥')
|
|
|
|
+ Thingname = models.CharField(blank=True, max_length=256, default='', verbose_name=u'IoT Thing Name')
|
|
|
|
+
|
|
|
|
+ class Meta:
|
|
|
|
+ db_table = 'iot_deviceInfo'
|
|
|
|
+ verbose_name = 'iot设备信息表'
|
|
|
|
+ verbose_name_plural = verbose_name
|