Django学习笔记:Models02 字段&字段参数

模型字段(常用)

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’。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270