Django ORM中经常使用的字段类型以及参数配置

1、数值型sql

  • 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。小整数时通常会用到。

2、字符型
django对应到Mysql中有两种类型:longtext和varchar。数据库

​ 除了TextField是longtest类型外,其余属于varchar类型。django

  • 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,用来处理图片相关的数据,在展现上会有所不一样。

3、日期类型
django中有3中日期类型,分别对应Mysql的date、datetime和timepost

  • DateField对应date
  • DateTimeField对应datetime
  • TimeField对应time

4、关系类型ui

  • ForeignKey,外键
  • OneToOneField,一对一
  • ManyToManyField,多对多

5、参数
上面django所提供的字段都是类。spa

好比models.CharField的定义就是:class CharField:。orm

每一个字段里面都提供了参数能够选择:继承

  • 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只是在表单验证的时候会检测你是否能够为空
相关文章
相关标签/搜索