网站首页 > 博客文章 正文
在 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 可以传递以下几个参数:
- auto_now :在每次这个数据保存的时候,都使用当前的时间。比如作为一个记录修改日期的字段,可以将这个属性设置为 True 。
- 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 需要以下步骤:
- 在你的 settings 文件中, 定义一个完整路径给 MEDIA_ROOT 以便让 Django在此处保存上传文件。 (出于性能考虑,这些文件并不保存到数据库。)
- 定义 MEDIA_URL 作为该目录的公共 URL。 要确保该目录对 WEB 服务器用户账号是可写的。
- 在你的 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
猜你喜欢
- 2024-09-10 第三章 SQL数据字段、字段类型简介
- 2024-09-10 MySQL中查看数据表结构和字段信息的方法!查看字段数据类型
- 2024-09-10 解决mybatis-plus修改数据库字段数据为NULL时失效的问题
- 2024-09-10 如何较方便给上百张数据库表添加表字段
- 2024-09-10 建议收藏|ArcGIS中操作字段相关代码汇总
- 2024-09-10 如何把数据库表中某个字段的所有2.0,3.0带.0的数据批量修改为2,3
- 2024-09-10 MySQL数据库教程-数据表字段约束(mysql数据库字段长度限制)
- 2024-09-10 简单地运用MySQL的增删改查(mysql增删改查语句)
- 2024-09-10 Excel工作表中的7个数据库函数,易懂易理解,方便且实用
- 2024-09-10 MySQL数据库知识汇总(数据库mysql知识点)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)