Django 字段,字段是模型的最重要组成部分,它是一系列数据表列的定义。模型字段是模型的类属性,它的命名不能与模型接口相同,如不能定义名为clean、save、delete的字段,同时字段名字中不能出现连续的两个下画线,因为连续两个下画线是Django数据库API的特殊语法。
每一个模型字段类型都对应一种数据库存储格式以及HTML元素。
为了支持不同的数据库,Django提供了几十种字段类型,常用的有以下几种。
- AutoField
IntegerField的改进形式,字段值根据已有的ID自动增长,常用作主键。一般情况下Django已经帮你自动创建了。 -
BigAutoField
与AutoField相似,不过BigAutoField使用64位整型存储数据,取值范围从1至9223372036854775807。 -
BooleanField
字段值只包含True和False。类似于SQL Server中的bit类型。默认情况下,BooleanField对应HTML的复选框:<input type="checkbox" ...>
。如果没有设置Field.default属性,那么它的默认值是None。 -
CharField
字符串类型,用于保存不太长的字符串。使用该字段必须要给出CharField.max_length
,该属性指定了CharField所能接收的最大字符数,也用于字段有效性验证。默认情况下,CharField对应HTML的文本框:<input type="text" ...>
。
在这里要注意由于不同数据库对字符串字段的大小限制不一样,所以在设置max_length的时候要考虑自己的数据库特性。
对于超长的字符串,建议使用TextField类型。
- DateField
日期类型,对应Python中的datetime.date
类型。该字段类型包含以下几个可选参数。
DateField.auto_now
,如果指定了该属性,那么每当保存数据时都会将该字段值更新为当前时间。不像默认值,标记为auto_now的字段值是不能被重写的。只有在Model.Save()
的时候才会被更新。
DateField.auto_now_add
,与auto_now类似,不过只有当该行数据第一次创建时才会保存当前时间。不像默认值,标记为auto_now_add的字段值是不能被重写的。
如果将日期类型字段的auto_now或者auto_now_add属性设置为True,那么字段的editable属性会被自动设置为False,同时blank属性会被自动设置为True。
auto_now、auto_now_add和default三个参数只能单独存在,不能搭配设置,否则会引起异常。
auto_now、auto_now_add属性总是使用TIME_ZONE中设置的时区保存时间,如果想使用其他时区,则不应该设置这两个属性。
示例:
date_field = models.DateField(default=datetime.datetime.now())
显示效果如图所示。
单击日历图表后,弹出日历控件,如图所示。
- DateTimeField
日期时间类型,对应Python中的datetime.datetime
类型。与DateField一样,包含两个额外参数auto_now和auto_now_add。
默认情况下,DateTimeField对应HTML的文本框:<input type="text" ...>
,在Admin后台页面则使用两个文本框显示DateTimeField字段。
示例:
date_time_field = models.DateTimeField(default=datetime.datetime.now())
显示效果如图所示。
单击钟表图表后,弹出预设时间选择控件,如图所示。
- DecimalField
指定小数位数的数值类型,对应Python的Decimal类型。
该字段类型包含两个必要参数:
DecimalField.max_digits
,数值的总位数,例如123.45就是5位。
DecimalField.decimal_places
,小数点后位数。
例如,设置一个字段的最大值为999,同时包含两位小数:
models.DecimalField(max_digits=5, decimal_places=2)
DecimalField对应HTML的文本框:<input type="number" ...>
示例:
decimal_field = models.DecimalField(max_digits=5, decimal_places=2, default=0.00)
显示效果如图所示。
- EmailField
本质就是CharField,不过会验证输入的字符串是不是一个有效的邮件地址。
示例:
email_field = models.EmailField(default='test@test.com')
显示效果如图所示。
- FileField
文件上传控件。
该字段不允许使用primary_key属性。包含两个可选参数:
FileField.upload_to,文件上传后的保存位置,例如:
class MyModel(models.Model):
# 文件上传到MEDIA_ROOT/uploads
upload = models.FileField(upload_to='uploads')
# 文件上传到MEDIA_ROOT/uploads/2017/12/30
upload = models.FileField(upload_to='uploads/%Y/%m/%d')
注意
MEDIA_ROOT在settings.py中设置,upload_to所指定的路径将会拼接在MEDIA_ ROOT之后。
FileField.storage,负责文件存储的Python类,用于存储和提取文件,类django.core. files.storage.FileSystemStorage
提供了基本的文件管理功能。例如下面代码,无论在settings. py里面如何设置MEDIA_ROOT都会按照fs所指定的路径存储被上传的文件:
frome django.db import models
from django.core.files.storage import FileSystemStorage
fs = FileSystemStorage(location='/media/documents')
class Car(models.Model):
...
photo = models.FileField(storage=fs)
# FileField 对应HTML文件上传控件: <input type="file" ...>
示例:
file_Field = models.FileField(upload_to=' file_ field')
显示效果如图所示。
- FilePathField
文件列表显示字段,该字段接收一个必选参数以及一个可选参数。
- 必选参数:
FilePathField.path,当前路径下的文件将会显示在下拉列表中。注意路径分隔符是“/”。 -
可选参数:
FilePathField.match
,一段正则表达式,用于过滤FilePathField.path中的文件,注意该正则表达式只能过滤文件名,不能过滤路径。
FilePathField.recursive
,参数值为True或False。当参数设置为True时,FilePathField. path的子文件夹中符合条件的文件也会显示在下拉列表中,否则只显示当前文件夹中的文件,默认值为True。
FilePathField.allow_files
,参数值为True或False。
可以从下面目录结构查看FilePathField显示效果:
示例1:
file_path_field = models.FilePathField(path='D:/File/ file_path', match='.jpg$',
recursive=False, allow_ files=True, allow_folders=False)
显示效果如图所示。
示例2:
file_path_field = models.FilePathField(path='D:/File/file_path', match='.jpg$',
recursive=True, allow_files=True, allow_folders=False)
显示效果如图所示。
注意
(1) 文件的绝对路径会显示在HTML代码中,会导致一定的安全隐患,因此需要谨慎使用FilePathField对象。
(2) FilePathField在数据库中使用varchar类型存储,默认最大长度为100字符。
- FloatField
浮点数类型,对应Python的float类型。 -
ImageFIeld
包含FileField字段的全部属性与方法,但是仅允许上传图片类型文件。
为了设置图片显示的高度与宽度,ImageField字段额外提供两个属性:
ImageField.height_field
,图片高度。
ImageField.width_field
,图片宽度。 -
IntegerField
整数字段,取值范围:-2147483648~2147483647
。对于所有Django支持的数据库来说都是安全的。 -
PositiveIntegerField
正整数类型,取值范围:0~2147483647。 -
PositiveSmallIntegerField
小正整数类型,取值范围:0~32767。 -
SlugField
Slug是用于新闻业的专业名词,slug是一个简短的文本,只允许包含字母、数字、下画线和连字符。与CharField相似,可以指定max_length属性,如果没有显式地给出max_ length值,默认值为50。
如果想在SlugField字段中使用除ASCII之外的其他Unicode字符,可以将属性SlugField.allow_unicode
设置为True。
- SmallIntegerField
小整数类型,取值范围:-32768~32767
。 -
TextField
超长文本类型。
示例:
text_field = models.TextField(default='')
显示效果如图所示。
- TimeField
时间类型,对应datetime.time。 -
URLField
CharField类型,只能接收URL字符串,默认最大长度是200字符。
酷客教程相关文章:
评论前必须登录!
注册