Model和Meta
概念
就是对象的意思,底层一个Model对应一张表,而Meta是Model的内部类,是用来描述Model和数据库表的相关元数据信息,比如主键,排序,unique_key 的。
也不是啥新鲜的概念。
Model
所有自定义的模型都要继承django.db.models
Meta
Meta是你定义的模型的内部类,没啥稀奇的。
Model支持的字段类型
为了方便。Model到数据库都定义好了字段类型,这算是一种映射概念,也没啥稀奇的。
- AutoField: 自增id
- VooleanField: true/false 数据库存的是数字,模型映射为True/False
- CharField: varchar类型
- DateField:Date 日期【2023-10-01】
- DateTimeField: 日期时间【2023-10-01 23:10:33】
- IntergerField: int
- TextField: 对应数据库text
- TimeField:对应数据库Time [23:12:10]
- FloatField: 对应数据库Double
- FileField: 对应数据库varChar
- ImageField:对应数据库varChar
- DecumalField:对应数据库Decimal
字段类型支持的参数:
1. verbose_name 设置字段显示名称
2. primary_key 设置字段为主键
3. editable 是否可编辑,用于Admin后台
4. max_length 字符串长度
5. blank 为true表示允许值为'',false表示不允许 默认->false
6. null 为true表示允许为null,默认->false
7. default 设置默认值
8. choices 设置字段的可选值,这些可选值是会被校验的
9. db_column 数据库中生成的字段名称,默认为model中字段名
10. db_index 为该字段建立索引
11. unique 唯一键
12. err_massages 自定义错误信息,字典类型
13. validators 自定义错误验证器,列表类型
Meta 属性
- db_table: 值类型字符串->对应生成的数据库表名
- manager:值类型 boolean ->是否还由Django管理生命周期
- ordering: 值类型 列表->排序,字段前加’-’ 表示降序
- index_together:值类型列表中放元组,表示唯一键
- unique_together:值类型列表中放元组,表示唯一键
例子
class DwDatabaseAssetItemPwMap(models.Model):
id = models.CharField(primary_key=True)
asset_item_id = models.IntegerField('资产项id')
asset_item_name = models.CharField('资产项名称', max_length=128, blank=True, null=True)
name = models.CharField('服务器名', max_length=255)
instance_id = models.CharField('实例id', max_length=128, blank=True, null=True)
region = models.CharField('区域', max_length=255, blank=True, null=True)
dw_server_id = models.IntegerField('dw服务器id')
project = models.ForeignKey(Project, on_delete=models.CASCADE, verbose_name='项目')
public_ip = models.CharField('公网ip', max_length=255, blank=True, null=True)
local_ip = models.CharField('内网ip', max_length=255, blank=True, null=True)
port = models.IntegerField('端口')
asset_item_pw_id = models.IntegerField('密码id', null=True)
username = models.CharField('账号', max_length=99)
password = AesEncryptedCharField(verbose_name='密码', max_length=255)
asset_id = models.IntegerField('资产项id', null=True)
class Meta:
app_label = 'test_table'
managed = False
db_table = 'dw_sink_database_asset_item_pw_map'
unique_together = (('asset_item_id', 'dw_server_id', 'asset_item_pw_id',))