模型字段(常用)
AutoField
整数型自增字段,从1增加。一个类中只能有一个自增字段,且必须是主键。
当用户未指定主键时,Django会自动添加主键:id = models.AutoField(primary_key = True)
BooleanField
布尔值型字段,默认值是None。
默认为CheckboxInput标签
CharField(max_length=n)
字符串字段,max_length参数必须提供,限制字符串长度值,同时限制前端和模型、数据库的字符串长度。
默认为input text标签
DateField
日期型字段,在admin后台自动添加一个日历表,以及附加日期合法性验证。
auto_now_add=True/False:记录/不记录对象的创建时间(不可修改)
auto_now=True/False:记录/不记录对象的修改时间
默认为TextInput标签
DateTimeField
日期型字段,比DateField增加显示小时、分钟、秒
EmailField
邮箱类型,默认最大长度max_length=254,可以使用Django内置的EmailValidator进行邮箱地址的合法性验证。
FileField
上传文件类型,将文件的上传路径以相对路径字符串形式保存在数据库内(默认最大长度max_length=100,可调),而真实文件保存在服务器的文件系统中。该字段不能设为主键。
upload_to=’xxx/’:上传地址的相对路径名,可以接收字符串,也可以接收一个回调函数,回调函数必须接收两个参数,并返回路径的字符串。
文件上传位置:MEDIA_ROOT的主路径/upload_to的相对路径。
默认为ClearableFileInput标签
FilePathField(path=’xxx’)
保存文件路径型字段,上传文件的路径字符串保存在数据库内(字符串默认最大长度max_length=100,可调),真实文件保存在服务器的文件系统中。该字段不能设为主键。
path参数必须提供,表示系统绝对路径。
match=’<正则表达式>’,用于匹配文件名
recursive=False/True,不包含/包含子目录
allow_files=True/False,决定match匹配/不匹配文件名
allow_floders=False/True,决定match不匹配/匹配目录名
ImageField
上传图像类型,将图片的上传路径以相对路径字符串形式保存在数据库内(默认最大长度max_length=100,可调),而真实图片保存在服务器的文件系统中。该字段不能设为主键。
height_field=n,保存图片高度信息
width_field=n,保存图片宽度信息
使用前需要先安装pillow模块,pip install pillow
默认为ClearableFileInput标签
MEDIA的上传配置:
①在settings.py文件中,配置MEDIA_URL = ‘/media/’,作为访问的URL;
再配置MEDIA_ROOT = os.path.join(BASE_DIR,‘media’),作为上传文件在服务器中的路径。
# MEDIA_ROOT只能配置一个,STATICFILES_DIRS可配置多个
②在FileField或ImageField字段中定义upload_to=’xxx’,可用%Y表示年份,%m表示月份,对文件夹进行命名;上传的文件放在MEDIA_ROOT目录下的upload_to目录。
MEDIA的模板访问方法一:
①配置media处理链接,在urls.py中:
from django.views.static imort serve
from ... import MEDIA_ROOT
url_patterns = [
url(r’^media/(?P<path>.*)$’, serve, {‘document_root’: MEDIA_ROOT} ),
]
# serve(request, path, document_root, show_indexes=False)函数会传入document_root的文件
②模板中访问图片/文件的路径:{{ <对象>.<图片/文件字段>.url }}
模板中访问图片/文件的名称:{{ <对象>.<图片/文件字段>.name }}
模板中访问图片/文件的大小:{{ <对象>.<图片/文件字段>.size }}
MEDIA的模板访问方法二:
①配置media处理链接,在urls.py中:
from django.views.static imort serve
from ... import MEDIA_ROOT
url_patterns = [
url(r’^media/(?P<path>.*)$’, serve, {‘document_root’: MEDIA_ROOT} ),
]
②添加MEDIA处理类,在settings.py > TEMPLATES > OPTIONS > context_processors中:
'django.template.context_processors.media',
它会将模板中的{{ MEDIA_URL }}转换成settings.py中的MEDIA_URL配置路径。
③模板中访问:{{ MEDIA_URL }}{{ <对象>.<图片/文件字段> }}
GenericIPAddressField
IPV4或IPV6地址,字符串形式。
默认为TextInput标签
IntegerField
整数类型字段,-2147483648~2147483647。
默认为NumberInput标签
TextField
大段的字符型字段,max_length参数用来限制前端输入层面,不限制模型和数据库层面。
默认为Textarea标签
URLField
保存url地址的字符串型字段,默认最大长度max_length=200。
模型字段参数
blank=False
是表单验证层面的,用来验证输入框是否允许内容为空,默认为False。
null=False
是数据库层面的,默认为False,表示数据库不用NULL存储空值,当为True时,数据库用NULL存储空值。
如果一个blank=True, null=False的字段接收到空值,可能出现bug或异常。
choices=((’xx’, ’oo’), (’xx’, ’oo’), ...)
一个页面上的下拉型选择框,传入一个二维元组,内部二元元组的第一个值显示在前端页面,传递在url/?name=value的value、使用在views函数的参数;二元元组的第二个值显示在Admin后台,当templates或view引用时可以用<实例>.get__display()获得。
#在CharField中使用时,传入的元组是两个字符串(‘xx‘, ‘xxx‘);在IntegerField中使用时,传入的元组是数字和字符串(1, ‘xxx’)
db_colunm=’ ’
定义该字段在数据表中的列名,默认用字段名作为列名。
db_index=False
默认为False,数据库不为当前字段创建索引,当为True时,数据库创建索引。
default=’ ‘
设置字段的默认值,可传入一个值或一个可调用对象,如果是可调用对象,每次创建新对象时都会调用。不能传入列表、集合等可变对象,不能传入lambda匿名函数。
editable=True
默认为True,当为False时,当前字段不在admin后台或其他表单中显示,还会被模型验证功能跳过。
error_messages={ }
用于自定义错误信息,传入字典类型值,字典的key可以是null、blank、invalid、invalid_choice、unique、unique_for_date中的一个。
primary_key=True
将该字段设为主键,同时关闭Django自动生成id的功能。
如果不设置主键,Django将自动创建一个AutoField自增字段并设为主键,即:
id = models.AutoField(primary_key=True)
隐含参数:null=False, Unique=True
unique=True
当为True时,该字段的数据在整个数据表内不可重复。
unique_for_date=’ ‘
使该字段对象的日期唯一,如果有一个名为title的字段并设置了unique_for_date="pub_date",那么Django不允许有两个模型对象具备同样的title和pub_date。
unique_for_month=’ ‘
同上,月份唯一。
unique_for_year=’ ‘
同上,年份唯一。
verbose_name=’ ‘
为字段设置一个友好的别名,显示在Admin后台中,默认在第一参数位置。如:
first_name = models.CharField(“姓氏”, max_length=30)
当不设置verbose_name时,Django默认用字段名作为别名,并将其中的下划线转换为空格。
当第一位置参数被ForeignKey、ManyToManyField、OneToOneField占用时,要显式的指定verbose_name=’xxx’。