Django ORM中常用的字段类型以及参数配置
程序员文章站
2022-03-10 12:28:24
一、数值型 AutoField对应int(11)。自增主键,Django Model默认提供,可以被重写。 BooleanField对应tinyint(1)。布尔类型字段,一般用于记录状态标记。 DecimalField对应decimal。开发对数据精准要求较高大的业务时考虑使用。比如:cash=m ......
一、数值型
- autofield对应int(11)。自增主键,django model默认提供,可以被重写。
- booleanfield对应tinyint(1)。布尔类型字段,一般用于记录状态标记。
- decimalfield对应decimal。开发对数据精准要求较高大的业务时考虑使用。比如:cash=models.decimalfield(max_length, decimal_places=2, default=0, verbose_name=“消费金额”),就是定义长度为8位、精度位2位的数字,例如数字:666666.66。
- intergerfield对应**int(11) **。同autofield一样,唯一的差别就是不自增。
- positiveintegerfield。同integerfield,只包含正整数。
- smallintegerfield对应smallint。小整数时一般会用到。
二、字符型
django对应到mysql中有两种类型:longtext和varchar。
除了textfield是longtest类型外,其他属于varchar类型。
- charfield对应varchar。基础的varchar类型。
- urlfield.继承自charfield,但是实现了对url特特殊处理。用来存储url数据,非url数据可以在业务层就拒绝掉,不会存入数据库中。
- uuidfield对应char(32)。除了在postgresql中使用的是uuid类型外,在其他数据库中均是固定长度char(32),用来存放生成的唯一id。
- emailfield。同urlfield一样继承自charfield,多了对email的特殊处理。
- filefield。同urlfield一样,它继承自charfield,对了对文件的特殊处理。
- textfield对应longtext。一般用于存放大量文本内容,比如新闻正文、博客正文。
- imagefield。继承自filefield,用来处理图片相关的数据,在展示上会有所不同。
三、日期类型
django中有3中日期类型,分别对应mysql的date、datetime和time
- datefield对应date
- datetimefield对应datetime
- timefield对应time
四、关系类型
- foreignkey,外键
- onetoonefield,一对一
- manytomanyfield,多对多
五、参数
上面django所提供的字段都是类。
比如models.charfield的定义就是:class charfield:。
每个字段里面都提供了参数可以选择:
- null。可以同blank进行对比。null用于设定在数据库层面是否允许为空
- blank。针对业务层面,该值是否允许为空。
- choices。配置字段的choices后,在admin页面上就可以看到对应的可选项展示。
- db_column。默认情况下,定义的field就是对应数据库中的字段名称,通过这个参数可以指定model中的某个字段对应数据库中的哪个字段。
- db_index。数据库索引配置。
- default。默认值配置。
- editable。是否可编辑,默认是true。如果不想这个字段显示在页面上,可以配置为false。
- error_messages。用来自定义字段值校验失败时的异常提示,它是字典格式。key的值可选项为null、blank、invalid、invalid_choice、unique和unique_for_date。
- help_text。字段提示语,配置这一项后,在页面对应字段的下方会展示此配置。
- primary_key。主键,一个model只允许设置一个字段为primary_key。
- unique。唯一约束,当需要配置唯一值时,设置unique=true,设置此项后,不需要设置db_index。
- unique_for_date。针对date(日期)的联合约束。比如说一天只能写一篇博文,即:unique_for_date=“博文”
- unique_for_month。针对月份的联合约束 。
- unique_for_month。针对年份的联合约束。
- verbose_name。字段对应的展示文案。
- validators。自定义校验逻辑,同form类似。
关于django字段类型中 blank和null的区别
blank
设置为true时,字段可以为空。设置为false时,字段是必须填写的。字符型字段charfield和textfield是用空字符串来存储空值的。
如果为true,字段允许为空,默认不允许。
null
设置为true时,django用null来存储空值。日期型、时间型和数字型字段不接受空字符串。所以设置integerfield,datetimefield型字段可以为空时,需要将blank,null均设为true。
如果为true,空值将会被存储为null,默认为false。
如果想设置booleanfield为空时可以选用nullbooleanfield型字段。
一句话概括
- null 是针对数据库而言,如果 null=true, 表示数据库的该字段可以为空。
- blank 是针对表单的,如果 blank=true,表示你的表单填写该字段的时候可以不填,比如 admin 界面下增加 model 一条记录的时候。直观的看到就是该字段不是粗体
- 通俗点说,该字段null=true后,你进行插入,修改操作时可以为空,然后django把空值转换成null存在数据库中,而blank只是在表单验证的时候会检测你是否可以为空
上一篇: C#操作MongoDB的帮助类-简单封装