专业的编程技术博客社区

网站首页 > 博客文章 正文

Django:模型常用字段(四)(django字段类型)

baijin 2024-09-10 10:54:01 博客文章 11 ℃ 0 评论

在 Django 中,定义了一些 Field 来与数据库表中的字段类型来进行映射。以下将介绍那些常用 的字段类型。

AutoField

映射到数据库中是 int 类型,可以有自动增长的特性。一般不需要使用这个类型,如果不指定主键,那么模型会自动地生成一个叫做 id 的自动增长的主键。如果你想指定一个其他名字的并且具有自动增长的主键,使用AutoField 也是可以的。如果要显示的自定义一个自增列,必须给列设置为主键 primary_key=True。

BigAutoField

64位的整形,类似于 AutoField ,只不过是产生的数据的范围是从 1-9223372036854775807 。

BooleanField

在模型层面接收的是 True/False 。在数据库层面是 tinyint 类型。如果没有指定默认值,默认值是 None 。不能为空,Blank=True

NullBooleanField

允许为空的布尔类型 类似 BooleanField, 不过允许 NULL 作为其中一个选项。 推荐使用这个字段而不要用 BooleanField 加 null=True 选项。 admin 用一个选择框 <select>三个可选择的值: “Unknown”, “Yes” 和 “No” 来表示这些字段数据。

CharField

在数据库层面是 varchar 类型,单行输入,用于较短的字符串,如要保存大量文本, 使用 TextField。在 Python 层面就是普通的字符串。这个类型在使用的时候必须要指定最大的长度,也即必须要传递 max_length 这个关键字参数进去。

ComaSeparatedIntegerField

用逗号分隔的数字,与varchar相同, 继承CharField,所以必须 max_lenght 参数

DateField

日期类型。在 Python 中是datetime.date 类型,可以记录年月日。在映射到数据库中也是 date 类型。使用这个 Field 可以传递以下几个参数:

  1. auto_now :在每次这个数据保存的时候,都使用当前的时间。比如作为一个记录修改日期的字段,可以将这个属性设置为 True 。
  2. auto_now_add :在每次数据第一次被添加进去的时候,都使用当前的时间,之后的更新不再改变。比如作为一个记录第一次入库的字段,可以将这个属性设置为 True 。

DateTimeField

日期时间类型,类似于 DateField 。不仅仅可以存储日期,还可以存储时间。映射到数据库中是 datetime 类型。这个 Field 也可以使用 auto_now 和 auto_now_add 两个属性。

TimeField

时间类型。在数据库中是 time 类型。在 Python 中是 datetime.time 类型,时间 HH:MM[:ss[.uuuuuu]]。

EmailField

string类型(regex邮箱)= varchar对 string的 regex具有 CharField,它检查 Email的合法性,不接受 maxlength参数。类似于 CharField。类似于 CharField 。在数据库底层也是一个 varchar 类型。最大长度是254个字符。

ImageField

图片 类似 FileField, 不过要校验上传对象是否是一个合法图片。用于保存图像文件的字段。其基本用法和特性与FileField一样,只不过多了两个属性height和width。默认情况下,该字段在HTML中表现为一个ClearableFileInput标签。在数据库内,我们实际保存的是一个字符串类型,默认最大长度100,可以通过max_length参数自定义。真实的图片是保存在服务器的文件系统内的。

  • height_field参数:保存有图片高度信息的模型字段名。
  • width_field参数:保存有图片宽度信息的模型字段名。 使用Django的ImageField需要提前安装pillow模块,pip install pillow即可。

使用FileField或者ImageField字段的步骤:

  • 在settings文件中,配置MEDIA_ROOT,作为你上传文件在服务器中的基本路径(为了性能考虑,这些文件不会被储存在数据库中)。再配置个MEDIA_URL,作为公用URL,指向上传文件的基本路径。确保 Web服务器的用户帐号对目录有写权限。
  • 添加FileField或者ImageField字段到你的模型中,定义好upload_to参数,文件最终会放在MEDIA_ROOT目录的“upload_to”子目录中。
  • 所有真正被保存在数据库中的,只是指向你上传文件路径的字符串而已。可以通过url属性,在Django的模板中方便地访问这些文件。例如,假设你有一个ImageField字段,名叫mug_shot,那么在Django模板的HTML文件中,可以使用{{object.mug_shot.url}}来获取该文件。其中的object用你具体的对象名称代替。
  • 可以通过name和size属性,获取文件的名称和大小信息。

FileField

用来存储文件的。要求一个必须有的参数: upload_to, 一个用于保存上载文件的本地文件系统路径。 这个路径必须包含 strftime formatting, 该格式将被上载文件的 date/time 替换(so that uploaded files don’t fill up the given directory)。

在一个 model 中使用 FileField 或 ImageField 需要以下步骤:

  1. 在你的 settings 文件中, 定义一个完整路径给 MEDIA_ROOT 以便让 Django在此处保存上传文件。 (出于性能考虑,这些文件并不保存到数据库。)
  2. 定义 MEDIA_URL 作为该目录的公共 URL。 要确保该目录对 WEB 服务器用户账号是可写的。
  3. 在你的 model 中添加 FileField 或 ImageField, 并确保定义了 upload_to 选项,以告诉 Django 使用 MEDIA_ROOT 的哪个子目录保存上传文件。你的数据库中要保存的只是文件的路径(相对于 MEDIA_ROOT)。 出于习惯你一定很想使用 Django 提供的 get_<fieldname>_url 函数。举例来说,如果你的 ImageField 叫做 mug_shot, 你就可以在模板中以 {{ object。get_mug_shot_url }} 这种方式得到图像的绝对路径。

FilePathField

选择指定目录按限制规则选择文件,有三个参数可选, 其中”path”必需的,这三个参数可以同时使用, 参数描述:

  • path:必需参数,一个目录的绝对文件系统路径。 FilePathField 据此得到可选项目。 Example: “/home/images”;
  • match:可选参数, 一个正则表达式, 作为一个字符串, FilePathField 将使用它过滤文件名。 注意这个正则表达式只会应用到 base filename 而不是路径全名。 Example: “foo。*\。txt^”, 将匹配文件 foo23.txt 却不匹配 bar.txt 或 foo23.gif;
  • recursive:可选参数, 是否包括 path 下全部子目录,True 或 False,默认值为 False。 match 仅应用于 base filename, 而不是路径全名。 如:FilePathField(path=”/home/images”, match=”foo.*”, recursive=True)…会匹配 /home/images/foo.gif 而不匹配 /home/images/foo/bar.gif

FloatField

浮点类型 = double 浮点型字段。 必须提供两个 参数, 参数描述:

  • max_digits:总位数(不包括小数点和符号)
  • decimal_places:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:FloatField(…,max_digits=5, decimal_places=2),要保存最大值一百万(小数点后保存10位)的话,你要这样定义:FloatField(…,max_digits=19, decimal_places=10)

IntegerField

整形。值的区间是 -2147483648——2147483647 。

BigIntegerField

大整形。值的区间是 -9223372036854775808——9223372036854775807 。

integer_field_ranges = {
 ? ?'SmallIntegerField': (-32768, 32767),
 ? ?'IntegerField': (-2147483648, 2147483647),
 ? ?'BigIntegerField': (-9223372036854775808, 9223372036854775807),
 ? ?'PositiveSmallIntegerField': (0, 32767),
 ? ?'PositiveIntegerField': (0, 2147483647),
}


PositiveIntegerField

正整形,类似 IntegerField。值的区间是 0——2147483647 。

SmallIntegerField

小整形。值的区间是 -32768——32767 。数据库中的字段有:tinyint、smallint、int、bigint. 类似 IntegerField, 不过只允许某个取值范围内的整数。(依赖数据库)

PositiveSmallIntegerField

正smallInteger 正小整型字段,类似 PositiveIntegerField, 取值范围较小(数据库相关)SlugField“Slug” 是一个报纸术语。 slug 是某个东西的小小标记(短签), 只包  含字母,数字,下划线和连字符。它们通常用于URLs。 若你使用 Django 开发版本,你可以指定 maxlength。 若 maxlength 未指定, Django 会使用默认长度: 50,它接受一个额外的参数: prepopulate_from: 来源于slug的自动预置列表

TextField

大量的文本类型。映射到数据库中是longtext类型。

UUIDField

只能存储 uuid 格式的字符串。 uuid 是一个32位的全球唯一的字符串,一般用来作为主键。

URLField

类似于 CharField ,只不过只能用来存储 url 格式的字符串。并且默认的 max_length 是200。若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在(即URL是否被有效装入且没有返回404响应).

IPAddressField

字符串类型(ip4正则表达式) 一个字符串形式的 IP 地址, (如 “202.1241.30″)。

GenericIPAddressField

字符串类型(ip4和ip6是可选的) 参数protocol可以是:both、ipv4、ipv6 验证时,会根据设置报错

SlugField

减号、下划线、字母、数字 它们通常用于URLs。

BinaryField

二进制

PhoneNumberField

一个带有合法美国风格电话号码校验的 CharField(格式:XXX-XXX-XXXX)

USStateField

美国州名缩写,由两个字母组成(天朝人民无视)。

XMLField

XML字符字段,校验值是否为合法XML的 TextField,必须提供参数: schema_path:校验文本的 RelaxNG schema 的文件系统路径。

Decimal

十进制小数类型 = decimal 必须指定整数位max_digits和小数位decimal_places

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表