一、常用字段类型
看完上一节的基本概念之后,我们接下来了解具体实现。
来看一下上一节的一行代码
name = models.CharField(max_length=50, verbose_name="名称")
你可能要问CharField是什么鬼,它就是这个字段在数据库中的你设置的类型
1.数值型
- AutoField 类型为int(11)自增主键 Django Model默认提供,可以被重写,完整定义是
id = models.AutoField(primary_key=True)
- BooleanField 类型为tinyint(1)。布尔类型字段,一般用于记录状态标记。
- DecimalField 类型为decimal。开发对数据精度要求较高的业务时考虑使用,比如支付金融等。定义时需要指定精确到多少位,例如:定义长度为8,精度为2位的数字
cash = models.DecimalField(max_digits=8, decimal_places=2, default=0, verbose_name="消费金额")
如果想定义666.66这样的数字
需要定义max_digits = 5, decimal_places=2
同时在python中也要使用Dcimal类型来转换数据(from decimal import Decimal)
- IntegerField 类型为int(11)它同AutoField一样,唯一的差别就是不自增
- PositiveIntegerField 同IntergerField,只包含整数
- SmallIntegerField 类型为smallint,小整数时一般会用到
2.字符型
除了TextField是longtext类型外,其他均属于varchar类型。
- CharField varchar 基础的varchar类型
- URLField 继承自CharField,但是实现了对URL的特殊处理
- UUIDField char(32)除了在PostgreSQL中使用的是UUID类型为,其他数据库中均是固定长度的32,用来存放生辰的唯一id
- EmailField 同UUIDField一样,它继承自CharField,多了对E-mail的特殊处理
- FileField 同UUIDField一样,它继承自CharField,多了对文件的特殊处理。当你定义一个字段为FileField时,在admin部分展示时会自动生成一个可上传文件的按钮。
- TextField 类型为longtext,一般用来存放大量文本内容,比如新闻正文,博客正文
- ImageField 继承FileField,用来处理图片相关的数据,在展示上会有不同
3.日期类型
- dateField 日期
- DateTimeField 日期时间
- TimeField 时间
4.关系类型
外键和一对一其实是一种,只是一对一在外键的字段上加了unique,多对多会创建一个中间表
- ForeignKey
- OneToOneField
- ManyToManyField
二、参数
null 可以同blank对比考虑,其中null用于设定在数据库层面是否允许为空
blank 针对业务层面,该值是否允许为空
choices 配置字段的choices后,在admin页面就可以看到对应的可选项展示
db_column 这个参数可以指定Model中的某个字段对应数据库中的哪个字段
db_index 索引配置对于业务上需要进行作为查询条件的字段,应该配置此项
default 默认配置
editable 是否可编辑,默认是True。如果不想将这个字段展示到页面上,可以配置为 False
error_messages 用来自定义字段值效验失败时的异常提示,它是字典格式。
help_text 字段提示语,配置这一项后,在页面对应字段的下方会展示此配置。
primary_key 主键 一个Model只允许设置一个字段为primary_key
unique 唯一约束,当需要配置唯一值时,设置unique=True ,设置此项后,不需要设置db_index
unique_for_date 针对date的联合约束,比如我们需要一天只能有一篇名《学习Django》的文章,那么可以在定义title字段时配置参数unique_for_date="created_time"(这并不是数据库层的约束)
unique_for_month 针对月份的联合约束
unique_for_year 针对年份的联合约束
verbose_name 字段对应的展示文案
validators 自定义效验逻辑