【django基础】django模型的字段类型简介
说实在的,每一个框架基本都会用一套orm,只是各有各的标准,每次用起来都挺费劲的,所以还是要单独整理下
AutoField
—自增列 =int(11)
如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将给列设置为主键primary_key=True
。CharField
—字符串字段 单行输入,用于较短的字符串,如要保存大量文本, 使用TextField
。必须max_length
参数,django会根据这个参数在数据库层和校验层限制该字段所允许的最大字符数。BooleanField
—布尔类型=tinyint(1)
不能为空,Blank=True
ComaSeparatedIntegerField
—用逗号分割的数字=varchar
继承CharField
,所以必须max_lenght
参数。DateField
—日期类型date
对于参数,auto_now = True
则每次更新都会更新这个时间;auto_now_add
则只是第一次创建添加,之后的更新不再改变。DateTimeField
—日期类型datetime
同DateField
的参数Decimal
—十进制小数类型 =decimal
必须指定整数位max_digits
和小数位decimal_places
EmailField
—字符串类型(正则表达式邮箱) =varchar
对字符串进行正则表达式 一个带有检查 Email 合法性的CharField
,不接受maxlength
参数。FloatField
—浮点类型 =double
浮点型字段。 必须提供两个 参数, 参数描述:
max_digits
:总位数(不包括小数点和符号)
decimal_places
:小数位数。如:要保存最大值为 999 (小数点后保存2位),你要这样定义字段:FloatField(…,max_digits=5, decimal_places=2)
,要保存最大值一百万(小数点后保存10位)的话,你要这样定义:FloatField(…,max_digits=19, decimal_places=10)
IntegerField
—整形 用于保存一个整数BigIntegerField
—长整形
数值类型的数值范围
integer_field_ranges = {
'SmallIntegerField': (-32768, 32767),
'IntegerField': (-2147483648, 2147483647),
'BigIntegerField': (-9223372036854775808, 9223372036854775807),
'PositiveSmallIntegerField': (0, 32767),
'PositiveIntegerField': (0, 2147483647),
}
IPAddressField
—字符串类型(ip4正则表达式) 一个字符串形式的 IP 地址, (如 “202.1241.30″)。GenericIPAddressField
—字符串类型(ip4和ip6是可选的) 参数protocol可以是:both、ipv4、ipv6 验证时,会根据设置报错NullBooleanField
—允许为空的布尔类型 类似BooleanField
, 不过允许 NULL 作为其中一个选项。 推荐使用这个字段而不要用BooleanField
加null=True
选项。 admin 用一个选择框 (三个可选择的值:“Unknown”
,“Yes”
和“No”
) 来表示这种字段数据。PositiveIntegerField
—正Integer 类似IntegerField
, 但取值范围为非负整数(这个字段应该是允许0值的…可以理解为无符号整数)PositiveSmallIntegerField
—正smallInteger
正小整型字段,类似PositiveIntegerField
, 取值范围较小(数据库相关)SlugField“Slug” 是一个报纸术语。 slug 是某个东西的小小标记(短签), 只包 含字母,数字,下划线和连字符。它们通常用于URLs
。 若你使用 Django 开发版本,你可以指定 maxlength。 若 maxlength 未指定, Django 会使用默认长度: 50,它接受一个额外的参数:
prepopulate_from
: 来源于slug的自动预置列表SlugField
—减号、下划线、字母、数字 它们通常用于URLs
SmallIntegerField
—数字 数据库中的字段有:tinyint
、smallint
、int
、bigint
. 类似IntegerField
, 不过只允许某个取值范围内的整数。(依赖数据库)TextField
—字符串=longtext
,一个容量很大的文本字段, admin 管理界面用 多行编辑框表示该字段数据。TimeField
—时间HH:MM[:ss[.uuuuuu]]
时间字段,类似于DateField
和DateTimeField
。URLField
—字符串,地址正则表达式 用于保存URL。若 verify_exists 参数为 True (默认), 给定的 URL 会预先检查是否存在(即URL是否被有效装入且没有返回404响应).BinaryField
—二进制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文件中,可以使用{undefined{object.mug_shot.url}}
来获取该文件。其中的object用你具体的对象名称代替。
可以通过name
和size
属性,获取文件的名称和大小信息。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
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__url
函数。举例来说,如果你的ImageField
叫作mug_shot
, 你就可以在模板中以{undefined{ object。get_mug_shot_url }}
这样的方式得到图像的绝对路径。PhoneNumberField
—一个带有合法美国风格电话号码校验的CharField
(格式:XXX-XXX-XXXX)USStateField
—美国州名缩写,由两个字母组成(天朝人民无视)。XMLField
—XML字符字段,校验值是否为合法XML的TextField
,必须提供参数:
schema_path
:校验文本的RelaxNG schema
的文件系统路径。